1 | #! /usr/bin/env python |
---|
2 | |
---|
3 | import sys |
---|
4 | from aubio import source, sink, pvoc, tss |
---|
5 | |
---|
6 | if __name__ == '__main__': |
---|
7 | if len(sys.argv) < 2: |
---|
8 | print('usage: %s <inputfile> <outputfile_transient> <outputfile_steady>' % sys.argv[0]) |
---|
9 | sys.exit(1) |
---|
10 | |
---|
11 | samplerate = 44100 |
---|
12 | win_s = 1024 # fft size |
---|
13 | hop_s = win_s // 4 # block size |
---|
14 | threshold = 0.5 |
---|
15 | |
---|
16 | f = source(sys.argv[1], samplerate, hop_s) |
---|
17 | g = sink(sys.argv[2], samplerate) |
---|
18 | h = sink(sys.argv[3], samplerate) |
---|
19 | |
---|
20 | pva = pvoc(win_s, hop_s) # a phase vocoder |
---|
21 | pvb = pvoc(win_s, hop_s) # another phase vocoder |
---|
22 | t = tss(win_s, hop_s) # transient steady state separation |
---|
23 | |
---|
24 | t.set_threshold(threshold) |
---|
25 | |
---|
26 | read = hop_s |
---|
27 | |
---|
28 | while read: |
---|
29 | samples, read = f() # read file |
---|
30 | spec = pva(samples) # compute spectrum |
---|
31 | trans_spec, stead_spec = t(spec) # transient steady-state separation |
---|
32 | transients = pva.rdo(trans_spec) # overlap-add synthesis of transients |
---|
33 | steadstate = pvb.rdo(stead_spec) # overlap-add synthesis of steady states |
---|
34 | g(transients, read) # write transients to output |
---|
35 | h(steadstate, read) # write steady states to output |
---|
36 | |
---|
37 | del f, g, h # finish writing the files now |
---|
38 | |
---|
39 | from demo_spectrogram import get_spectrogram |
---|
40 | from pylab import subplot, show |
---|
41 | subplot(311) |
---|
42 | get_spectrogram(sys.argv[1]) |
---|
43 | subplot(312) |
---|
44 | get_spectrogram(sys.argv[2]) |
---|
45 | subplot(313) |
---|
46 | get_spectrogram(sys.argv[3]) |
---|
47 | show() |
---|