Changeset f6892d4 for python/demos
- Timestamp:
- May 10, 2016, 10:31:05 PM (9 years ago)
- Branches:
- feature/autosink, feature/cnn, feature/cnn_org, feature/constantq, feature/crepe, feature/crepe_org, feature/pitchshift, feature/pydocstrings, feature/timestretch, fix/ffmpeg5, master, pitchshift, sampler, timestretch, yinfft+
- Children:
- 8b56b18
- Parents:
- 0c6e3b0
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
python/demos/demo_pitch_sinusoid.py
r0c6e3b0 rf6892d4 1 1 #! /usr/bin/env python 2 2 3 from numpy import random, sin, arange, zeros 4 from math import pi 5 from aubio import fvec, pitch 3 import numpy as np 4 import aubio 6 5 7 6 def build_sinusoid(length, freqs, samplerate): 8 return sin( 2. * pi * arange(length) * freqs / samplerate)7 return np.sin( 2. * np.pi * np.arange(length) * freqs / samplerate).astype(aubio.float_type) 9 8 10 9 def run_pitch(p, input_vec): 11 f = fvec (p.hop_size) 12 cands = [] 13 for vec_slice in input_vec.reshape((-1, p.hop_size)): 14 f[:] = vec_slice 15 cands.append(p(f)) 16 return cands 10 cands = [] 11 for vec_slice in input_vec.reshape((-1, p.hop_size)): 12 a = p(vec_slice)[0] 13 cands.append(a) 14 return cands 17 15 18 16 methods = ['default', 'schmitt', 'fcomb', 'mcomb', 'yin', 'yinfft'] … … 23 21 samplerate = 44100 24 22 sin_length = (samplerate * 10) % 512 * 512 25 freqs = zeros(sin_length)23 freqs = np.zeros(sin_length) 26 24 27 25 partition = sin_length / 8 … … 40 38 pointer += partition 41 39 pointer += partition 42 freqs[ pointer : pointer + partition ] = 400 + 5 * random.random(sin_length/8)40 freqs[ pointer : pointer + partition ] = 400 + 5 * np.random.random(sin_length/8) 43 41 44 42 a = build_sinusoid(sin_length, freqs, samplerate) 45 43 46 44 for method in methods: 47 p = pitch(method, buf_size, hop_size, samplerate) 48 cands[method] = run_pitch(p, a) 45 p = aubio.pitch(method, buf_size, hop_size, samplerate) 46 cands[method] = run_pitch(p, a) 47 print cands[method] 49 48 50 49 print "done computing" 51 50 52 51 if 1: 53 from pylab import plot, show, xlabel, ylabel, legend, ylim 54 ramp = arange(0, sin_length / hop_size).astype('float') * hop_size / samplerate 55 for method in methods: 56 plot(ramp, cands[method],'.-') 52 import matplotlib.pyplot as plt 57 53 58 # plot ground truth 59 ramp = arange(0, sin_length).astype('float') / samplerate 60 plot(ramp, freqs, ':') 54 # times 55 ramp = np.arange(0, sin_length / hop_size).astype('float') * hop_size / samplerate 61 56 62 legend(methods+['ground truth'], 'upper right') 63 xlabel('time (s)') 64 ylabel('frequency (Hz)') 65 ylim([0,2000]) 66 show() 57 # plot each result 58 for method in methods: 59 plt.plot(ramp, cands[method], '.-', label=method) 67 60 61 # plot ground truth 62 ramp = np.arange(0, sin_length).astype('float') / samplerate 63 plt.plot(ramp, freqs, ':', label = 'ground truth') 64 65 plt.legend(loc='upper left') 66 67 plt.xlabel('time (s)') 68 plt.ylabel('frequency (Hz)') 69 plt.ylim([0,2000]) 70 plt.show()
Note: See TracChangeset
for help on using the changeset viewer.