Showing the changes to python (1 of 1 file). Show all
Unified · Split
| @@ -0,0 +1,55 @@ | ||
| 1 | +#! /usr/bin/env python | |
| 2 | + | |
| 3 | +import sys | |
| 4 | +from aubio import source, sink, pvoc | |
| 5 | +from numpy import arange, exp, hstack, zeros, cos | |
| 6 | +from math import pi | |
| 7 | + | |
| 8 | +def gauss(size): | |
| 9 | + return exp(- 1.0 / (size * size) * pow(2.0* arange(size) - 1. *size, 2.)); | |
| 10 | + | |
| 11 | +def hanningz(size): | |
| 12 | + return 0.5 * (1. - cos(2.*pi*arange(size) / size)) | |
| 13 | + | |
| 14 | +if __name__ == '__main__': | |
| 15 | + if len(sys.argv) < 2: | |
| 16 | + print 'usage: %s <inputfile> <outputfile>' % sys.argv[0] | |
| 17 | + sys.exit(1) | |
| 18 | + samplerate = 0 | |
| 19 | + if len(sys.argv) > 3: samplerate = int(sys.argv[3]) | |
| 20 | + f = source(sys.argv[1], samplerate, 256) | |
| 21 | + samplerate = f.samplerate | |
| 22 | + g = sink(sys.argv[2], samplerate) | |
| 23 | + | |
| 24 | + win_s = 512 # fft size | |
| 25 | + hop_s = win_s / 2 # hop size | |
| 26 | + pv = pvoc(win_s, hop_s) # phase vocoder | |
| 27 | + | |
| 28 | + # spectral weighting vector | |
| 29 | + spec_weight = hstack ( [ | |
| 30 | + .8 * hanningz(80)[40:], | |
| 31 | + zeros( 50 ), | |
| 32 | + 1.3 * hanningz(100), | |
| 33 | + zeros (win_s / 2 + 1 - 40 - 50 - 100), | |
| 34 | + ] ) | |
| 35 | + | |
| 36 | + if 0: | |
| 37 | + from pylab import plot, show | |
| 38 | + plot(spec_weight) | |
| 39 | + show() | |
| 40 | + | |
| 41 | + total_frames, read = 0, hop_s | |
| 42 | + while read: | |
| 43 | + # get new samples | |
| 44 | + samples, read = f() | |
| 45 | + # compute spectrum | |
| 46 | + spectrum = pv(samples) | |
| 47 | + # apply weight to spectral amplitudes | |
| 48 | + spectrum.norm *= spec_weight | |
| 49 | + # resynthesise modified samples | |
| 50 | + new_samples = pv.rdo(spectrum) | |
| 51 | + # write to output | |
| 52 | + g(new_samples, read) | |
| 53 | + total_frames += read | |
| 54 | + | |
| 55 | + print "read", total_frames / float(samplerate), "seconds from", f.uri | |