History

python/demos/demo_simple_spectral_weighting.py: added simple spectral weighting

Paul Brossier committed 12 years ago

Commit 2d88f411 parent c911b121 file · +55 −0Browse files

Showing the changes to python (1 of 1 file). Show all

Unified · Split

python/demos/demo_simple_spectral_weighting.py+55−0
@@ -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

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t