3 from numpy import random, sin, arange, ones, zeros
5 from aubio import fvec, pitch
7 def build_sinusoid(length, freqs, samplerate):
8 return sin( 2. * pi * arange(length) * freqs / samplerate)
10 def run_pitch(p, input_vec):
14 for vec_slice in input_vec.reshape((-1, p.hop_size)):
19 methods = ['default', 'schmitt', 'fcomb', 'mcomb', 'yin', 'yinfft']
25 sin_length = (samplerate * 10) % 512 * 512
26 freqs = zeros(sin_length)
28 partition = sin_length / 8
32 freqs[pointer: pointer + partition] = 440
36 freqs[ pointer : pointer + partition ] = 740
39 freqs[ pointer : pointer + partition ] = 1480
43 freqs[ pointer : pointer + partition ] = 400 + 5 * random.random(sin_length/8)
45 a = build_sinusoid(sin_length, freqs, samplerate)
47 for method in methods:
48 p = pitch(method, buf_size, hop_size, samplerate)
49 cands[method] = run_pitch(p, a)
51 print "done computing"
54 from pylab import plot, show, xlabel, ylabel, legend, ylim
55 ramp = arange(0, sin_length / hop_size).astype('float') * hop_size / samplerate
56 for method in methods:
57 plot(ramp, cands[method],'.-')
60 ramp = arange(0, sin_length).astype('float') / samplerate
61 plot(ramp, freqs, ':')
63 legend(methods+['ground truth'], 'upper right')
65 ylabel('frequency (Hz)')