History

python/demos/demo_mfcc.py: add options to plot first and second derivatives, and set samplerate/win_s/hop_s, thanks to @jhoelzl (closes #68)

Paul Brossier committed 10 years ago

Commit 70b2ab01 parent 88c89e31 file · +25 −8Browse files

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

Unified · Split

python/demos/demo_mfcc.py+25−8
@@ -2,20 +2,27 @@ · 1 unmodified line
22
33 import sys
44 from aubio import source, pvoc, mfcc
5−from numpy import vstack, zeros
5+from numpy import vstack, zeros, diff
66
7−win_s = 512 # fft size
8−hop_s = win_s // 4 # hop size
97 n_filters = 40 # must be 40 for mfcc
108 n_coeffs = 13
11−samplerate = 44100
129
1310 if len(sys.argv) < 2:
14− print("Usage: %s <source_filename>" % sys.argv[0])
11+ print("Usage: %s <source_filename> [samplerate] [win_s] [hop_s] [mode]" % sys.argv[0])
12+ print(" where [mode] can be 'delta' or 'ddelta' for first and second derivatives")
1513 sys.exit(1)
1614
1715 source_filename = sys.argv[1]
1816
17+if len(sys.argv) > 2: samplerate = int(sys.argv[2])
18+else: samplerate = 0
19+if len(sys.argv) > 3: win_s = int(sys.argv[3])
20+else: win_s = 512
21+if len(sys.argv) > 4: hop_s = int(sys.argv[4])
22+else: hop_s = win_s // 4
23+if len(sys.argv) > 5: mode = sys.argv[5]
24+else: mode = "default"
25+
1926 samplerate = 0
2027 if len( sys.argv ) > 2: samplerate = int(sys.argv[2])
2128
@@ -48,18 +55,28 @@ get_waveform_plot( source_filename, samplerate, block_size = hop_s, ax = wave) · 26 unmodified lines
4855 wave.xaxis.set_visible(False)
4956 wave.yaxis.set_visible(False)
5057
58+# compute first and second derivatives
59+if mode in ["delta", "ddelta"]:
60+ mfccs = diff(mfccs, axis = 0)
61+if mode == "ddelta":
62+ mfccs = diff(mfccs, axis = 0)
63+
5164 all_times = arange(mfccs.shape[0]) * hop_s
5265 n_coeffs = mfccs.shape[1]
5366 for i in range(n_coeffs):
5467 ax = plt.axes ( [0.1, 0.75 - ((i+1) * 0.65 / n_coeffs), 0.8, 0.65 / n_coeffs], sharex = wave )
5568 ax.xaxis.set_visible(False)
56− ax.yaxis.set_visible(False)
69+ ax.set_yticks([])
70+ ax.set_ylabel('%d' % i)
5771 ax.plot(all_times, mfccs.T[i])
5872
5973 # add time to the last axis
60−set_xlabels_sample2time( ax, frames_read, samplerate)
74+set_xlabels_sample2time( ax, frames_read, samplerate)
6175
6276 #plt.ylabel('spectral descriptor value')
6377 ax.xaxis.set_visible(True)
64−wave.set_title('MFCC for %s' % source_filename)
78+title = 'MFCC for %s' % source_filename
79+if mode == "delta": title = mode + " " + title
80+elif mode == "ddelta": title = "double-delta" + " " + title
81+wave.set_title(title)
6582 plt.show()

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