Showing the changes to python (1 of 1 file). Show all
Unified · Split
| @@ -1,19 +1,17 @@ | ||
| 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'] |
| 19 | 17 | |
| @@ -22,7 +20,7 @@ buf_size = 2048 · 2 unmodified lines | ||
| 22 | 20 | hop_size = 512 |
| 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 |
| 28 | 26 | pointer = 0 |
| @@ -39,29 +37,34 @@ freqs[ pointer : pointer + partition ] = 1480 · 10 unmodified lines | ||
| 39 | 37 | |
| 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() | |