source: python/demos/demo_simple_spectral_weighting.py @ 61a1e5d

feature/autosinkfeature/cnnfeature/cnn_orgfeature/constantqfeature/crepefeature/crepe_orgfeature/pitchshiftfeature/pydocstringsfeature/timestretchfix/ffmpeg5sampleryinfft+
Last change on this file since 61a1e5d was 4120fbc, checked in by Paul Brossier <piem@piem.org>, 8 years ago

python/demos: python3 and double precision compatibility

  • Property mode set to 100755
File size: 1.5 KB
Line 
1#! /usr/bin/env python
2
3import sys
4from aubio import source, sink, pvoc
5from numpy import arange, exp, hstack, zeros, cos
6from math import pi
7
8def gauss(size):
9    return exp(- 1.0 / (size * size) * pow(2.0* arange(size) - 1. *size, 2.));
10
11def hanningz(size):
12    return 0.5 * (1. - cos(2.*pi*arange(size) / size))
13
14if __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    duration = total_frames / float(samplerate)
56    print("read {:.3f}s from {:s}".format(duration, f.uri))
Note: See TracBrowser for help on using the repository browser.