annotate gmm_baseline_experiments/external_libs/librosa/librosa-0.3.1/tests/makeTestData.m @ 5:b523456082ca tip

Update path to dataset and reflect modified chunk naming convention.
author peterf
date Mon, 01 Feb 2016 21:35:27 +0000
parents cb535b80218a
children
rev   line source
peterf@2 1 function testData(source_path, output_path)
peterf@2 2 % testData(source_path, audio_file, output_path)
peterf@2 3 % source_path = path to DPWE code
peterf@2 4 % output_path = directory to store generated files
peterf@2 5 %
peterf@2 6 % CREATED:2013-03-08 14:32:21 by Brian McFee <brm2132@columbia.edu>
peterf@2 7 % Generate the test suite data for librosa routines:
peterf@2 8 %
peterf@2 9 % hz_to_mel
peterf@2 10 % mel_to_hz
peterf@2 11 % hz_to_octs
peterf@2 12 %
peterf@2 13 % stft
peterf@2 14 % istft
peterf@2 15 %
peterf@2 16 % ifgram
peterf@2 17 %
peterf@2 18 % load
peterf@2 19 % resample
peterf@2 20 %
peterf@2 21 % melfb
peterf@2 22 % dctfb
peterf@2 23 %
peterf@2 24 % localmax
peterf@2 25 %
peterf@2 26
peterf@2 27 % Make sure we have the path to DPWE code
peterf@2 28 addpath(source_path);
peterf@2 29
peterf@2 30 display('hz_to_mel');
peterf@2 31 testHz2Mel(output_path);
peterf@2 32
peterf@2 33 display('mel_to_hz');
peterf@2 34 testMel2Hz(output_path);
peterf@2 35
peterf@2 36 display('hz_to_octs');
peterf@2 37 testHzToOcts(output_path);
peterf@2 38
peterf@2 39 display('load');
peterf@2 40 testLoad(output_path);
peterf@2 41
peterf@2 42 display('stft');
peterf@2 43 testSTFT(output_path);
peterf@2 44
peterf@2 45 display('istft');
peterf@2 46 testISTFT(output_path);
peterf@2 47
peterf@2 48
peterf@2 49 display('ifgram');
peterf@2 50 testIFGRAM(output_path);
peterf@2 51
peterf@2 52 display('melfb');
peterf@2 53 testMelfb(output_path);
peterf@2 54
peterf@2 55 display('chromafb');
peterf@2 56 testChromafb(output_path);
peterf@2 57
peterf@2 58 display('resample');
peterf@2 59 testResample(output_path);
peterf@2 60
peterf@2 61 display('beat');
peterf@2 62 testBeat(output_path);
peterf@2 63
peterf@2 64 %% Done!
peterf@2 65 display('Done.');
peterf@2 66 end
peterf@2 67
peterf@2 68 function testHz2Mel(output_path)
peterf@2 69
peterf@2 70 % Test with either a scalar argument or a vector
peterf@2 71 P_HZ = {[440], [2.^(1:13)]};
peterf@2 72
peterf@2 73 % Slaney-style or HTK
peterf@2 74 P_HTK = {0, 1};
peterf@2 75
peterf@2 76 counter = 0;
peterf@2 77 for i = 1:length(P_HZ)
peterf@2 78 f = P_HZ{i};
peterf@2 79
peterf@2 80 for j = 1:length(P_HTK)
peterf@2 81 htk = P_HTK{j};
peterf@2 82
peterf@2 83 % Run the function
peterf@2 84 result = hz2mel(f, htk);
peterf@2 85
peterf@2 86 % save the output
peterf@2 87 counter = counter + 1;
peterf@2 88
peterf@2 89 filename = sprintf('%s/feature-hz_to_mel-%03d.mat', output_path, counter);
peterf@2 90 display([' `-- saving ', filename]);
peterf@2 91
peterf@2 92 save(filename, 'f', 'htk', 'result');
peterf@2 93 end
peterf@2 94 end
peterf@2 95 end
peterf@2 96
peterf@2 97 function testMel2Hz(output_path)
peterf@2 98
peterf@2 99 % Test with either a scalar argument or a vector
peterf@2 100 P_MELS = {[5], [2.^(-2:9)]};
peterf@2 101
peterf@2 102 % Slaney-style or HTK
peterf@2 103 P_HTK = {0, 1};
peterf@2 104
peterf@2 105 counter = 0;
peterf@2 106 for i = 1:length(P_MELS)
peterf@2 107 f = P_MELS{i};
peterf@2 108
peterf@2 109 for j = 1:length(P_HTK)
peterf@2 110 htk = P_HTK{j};
peterf@2 111
peterf@2 112 % Run the function
peterf@2 113 result = mel2hz(f, htk);
peterf@2 114
peterf@2 115 % save the output
peterf@2 116 counter = counter + 1;
peterf@2 117
peterf@2 118 filename = sprintf('%s/feature-mel_to_hz-%03d.mat', output_path, counter);
peterf@2 119 display([' `-- saving ', filename]);
peterf@2 120
peterf@2 121 save(filename, 'f', 'htk', 'result');
peterf@2 122 end
peterf@2 123 end
peterf@2 124 end
peterf@2 125
peterf@2 126 function testHzToOcts(output_path)
peterf@2 127
peterf@2 128 % Scalar argument or a vector
peterf@2 129 P_HZ = {[5], [2.^(2:14)]};
peterf@2 130
peterf@2 131 counter = 0;
peterf@2 132 for i = 1:length(P_HZ)
peterf@2 133 f = P_HZ{i};
peterf@2 134
peterf@2 135 % Run the function
peterf@2 136 result = hz2octs(f);
peterf@2 137
peterf@2 138 % save the output
peterf@2 139 counter = counter + 1;
peterf@2 140
peterf@2 141 filename = sprintf('%s/feature-hz_to_octs-%03d.mat', output_path, counter);
peterf@2 142 display([' `-- saving ', filename]);
peterf@2 143
peterf@2 144 save(filename, 'f', 'result');
peterf@2 145 end
peterf@2 146 end
peterf@2 147
peterf@2 148 function testLoad(output_path)
peterf@2 149
peterf@2 150 % Test: load a wav file
peterf@2 151 % get audio stream (floats) and sample rate
peterf@2 152 % preserve stereo or convert to mono
peterf@2 153 wavfile = 'data/test1_44100.wav';
peterf@2 154 [y, sr] = wavread(wavfile);
peterf@2 155 y = y'; % Transpose to make python code easier
peterf@2 156 mono = 0;
peterf@2 157
peterf@2 158 % Stereo output
peterf@2 159 counter = 1;
peterf@2 160
peterf@2 161 filename = sprintf('%s/core-load-%03d.mat', output_path, counter);
peterf@2 162 display([' `-- saving ', filename]);
peterf@2 163 save(filename, 'wavfile', 'mono', 'y', 'sr');
peterf@2 164
peterf@2 165 % Mono output
peterf@2 166 counter = 2;
peterf@2 167 mono = 1;
peterf@2 168 y = mean(y, 1);
peterf@2 169 filename = sprintf('%s/core-load-%03d.mat', output_path, counter);
peterf@2 170 display([' `-- saving ', filename]);
peterf@2 171 save(filename, 'wavfile', 'mono', 'y', 'sr');
peterf@2 172
peterf@2 173 end
peterf@2 174
peterf@2 175 function testMelfb(output_path)
peterf@2 176
peterf@2 177 % Test three sample rates
peterf@2 178 P_SR = [8000, 11025, 22050];
peterf@2 179
peterf@2 180 % Two FFT lengths
peterf@2 181 P_NFFT = [256, 512];
peterf@2 182
peterf@2 183 % Three filter bank sizes
peterf@2 184 P_NFILTS = [20, 40, 120];
peterf@2 185
peterf@2 186 % One width
peterf@2 187 P_WIDTH = [1.0];
peterf@2 188
peterf@2 189 % F_min
peterf@2 190 P_FMIN = [0, 512];
peterf@2 191
peterf@2 192 % F_max
peterf@2 193 P_FMAX = [2000, inf];
peterf@2 194
peterf@2 195 % Slaney or HTK mels
peterf@2 196 P_HTK = [0, 1];
peterf@2 197
peterf@2 198 % Generate tests
peterf@2 199 counter = 0;
peterf@2 200
peterf@2 201 for sr = P_SR
peterf@2 202 for nfft = P_NFFT
peterf@2 203 for nfilts = P_NFILTS
peterf@2 204 for width = P_WIDTH
peterf@2 205 for fmin = P_FMIN
peterf@2 206 for fmax = P_FMAX
peterf@2 207 if isinf(fmax)
peterf@2 208 fmax = sr / 2;
peterf@2 209 end
peterf@2 210 for htk = P_HTK
peterf@2 211
peterf@2 212 % Run the function
peterf@2 213 [wts, frqs] = fft2melmx(nfft, sr, nfilts, width, fmin, fmax, htk, 0);
peterf@2 214
peterf@2 215 % save the output
peterf@2 216 counter = counter + 1;
peterf@2 217
peterf@2 218 filename = sprintf('%s/feature-melfb-%03d.mat', output_path, counter);
peterf@2 219 display([' `-- saving ', filename]);
peterf@2 220
peterf@2 221 save(filename, ...
peterf@2 222 'sr', 'nfft', 'nfilts', 'width', ...
peterf@2 223 'fmin', 'fmax', 'htk', 'wts', 'frqs');
peterf@2 224 end
peterf@2 225 end
peterf@2 226 end
peterf@2 227 end
peterf@2 228 end
peterf@2 229 end
peterf@2 230 end
peterf@2 231
peterf@2 232 end
peterf@2 233
peterf@2 234 function testResample(output_path)
peterf@2 235
peterf@2 236 wavfile = 'data/test1_22050.wav';
peterf@2 237
peterf@2 238 [y_in, sr_in] = wavread(wavfile);
peterf@2 239 y_in = mean(y_in, 2); % Convert to mono
peterf@2 240
peterf@2 241 % Test a downsample, same SR, and upsample
peterf@2 242 P_SR = [8000, 22050, 44100];
peterf@2 243
peterf@2 244 counter = 0;
peterf@2 245
peterf@2 246 for sr_out = P_SR
peterf@2 247
peterf@2 248 y_out = resample(y_in, sr_out, sr_in);
peterf@2 249
peterf@2 250 counter = counter + 1;
peterf@2 251 filename = sprintf('%s/core-resample-%03d.mat', output_path, counter);
peterf@2 252 display([' `-- saving ', filename]);
peterf@2 253 save(filename, 'wavfile', 'y_in', 'sr_in', 'y_out', 'sr_out');
peterf@2 254 end
peterf@2 255 end
peterf@2 256
peterf@2 257 function testSTFT(output_path)
peterf@2 258
peterf@2 259 wavfile = 'data/test1_22050.wav';
peterf@2 260
peterf@2 261 [y, sr] = wavread(wavfile);
peterf@2 262 y = mean(y, 2); % Convert to mono
peterf@2 263
peterf@2 264 % Test a couple of different FFT window sizes
peterf@2 265 P_NFFT = [128, 256, 1024];
peterf@2 266
peterf@2 267 % And hop sizes
peterf@2 268 P_HOP = [64, 128, 256];
peterf@2 269
peterf@2 270 % Note: librosa.stft does not support user-supplied windows,
peterf@2 271 % so we do not generate tests for this case.
peterf@2 272
peterf@2 273 counter = 0;
peterf@2 274
peterf@2 275 for nfft = P_NFFT
peterf@2 276 for hop_length = P_HOP
peterf@2 277 % Test once with no hann window (rectangular)
peterf@2 278 hann_w = 0;
peterf@2 279 D = stft(y, nfft, hann_w, hop_length, sr);
peterf@2 280
peterf@2 281 counter = counter + 1;
peterf@2 282 filename = sprintf('%s/core-stft-%03d.mat', output_path, counter);
peterf@2 283 display([' `-- saving ', filename]);
peterf@2 284 save(filename, 'wavfile', 'D', 'sr', 'nfft', 'hann_w', 'hop_length');
peterf@2 285
peterf@2 286 % And again with default hann window (nfft)
peterf@2 287 hann_w = nfft;
peterf@2 288 D = stft(y, nfft, hann_w, hop_length, sr);
peterf@2 289
peterf@2 290 counter = counter + 1;
peterf@2 291 filename = sprintf('%s/core-stft-%03d.mat', output_path, counter);
peterf@2 292 display([' `-- saving ', filename]);
peterf@2 293 save(filename, 'wavfile', 'D', 'sr', 'nfft', 'hann_w', 'hop_length');
peterf@2 294 end
peterf@2 295 end
peterf@2 296 end
peterf@2 297
peterf@2 298 function testIFGRAM(output_path)
peterf@2 299
peterf@2 300 wavfile = 'data/test1_22050.wav';
peterf@2 301
peterf@2 302 [y, sr] = wavread(wavfile);
peterf@2 303 y = mean(y, 2); % Convert to mono
peterf@2 304
peterf@2 305 % Test a couple of different FFT window sizes
peterf@2 306 P_NFFT = [128, 256, 1024];
peterf@2 307
peterf@2 308 % And window sizes
peterf@2 309 % P_WIN = [0.25, 0.5, 1.0];
peterf@2 310 P_WIN = [1.0];
peterf@2 311
peterf@2 312 % And hop sizes
peterf@2 313 P_HOP = [0.25, 0.5, 1.0];
peterf@2 314
peterf@2 315 % Note: librosa.stft does not support user-supplied windows,
peterf@2 316 % so we do not generate tests for this case.
peterf@2 317
peterf@2 318 counter = 0;
peterf@2 319
peterf@2 320 for nfft = P_NFFT
peterf@2 321 for win_ratio = P_WIN
peterf@2 322 for hop_ratio = P_HOP
peterf@2 323 % Test once with no hann window (rectangular)
peterf@2 324 hop_length = round(hop_ratio * nfft);
peterf@2 325 hann_w = round(win_ratio * nfft);
peterf@2 326
peterf@2 327 [F, D] = ifgram(y, nfft, hann_w, hop_length, sr);
peterf@2 328
peterf@2 329 counter = counter + 1;
peterf@2 330 filename = sprintf('%s/core-ifgram-%03d.mat', output_path, counter);
peterf@2 331 display([' `-- saving ', filename]);
peterf@2 332 save(filename, 'wavfile', 'F', 'D', 'sr', 'nfft', 'hann_w', 'hop_length');
peterf@2 333 end
peterf@2 334 end
peterf@2 335 end
peterf@2 336 end
peterf@2 337
peterf@2 338 function testISTFT(output_path)
peterf@2 339
peterf@2 340 wavfile = 'data/test1_22050.wav';
peterf@2 341
peterf@2 342 [y_in, sr] = wavread(wavfile);
peterf@2 343 y_in = mean(y_in, 2); % Convert to mono
peterf@2 344
peterf@2 345 % Test a couple of different FFT window sizes
peterf@2 346 P_NFFT = [128, 256, 1024];
peterf@2 347
peterf@2 348 % And hop sizes
peterf@2 349 P_HOP = [64, 128, 256];
peterf@2 350
peterf@2 351 % Note: librosa.stft does not support user-supplied windows,
peterf@2 352 % so we do not generate tests for this case.
peterf@2 353
peterf@2 354 counter = 0;
peterf@2 355
peterf@2 356 for nfft = P_NFFT
peterf@2 357 for hop_length = P_HOP
peterf@2 358 % Test once with no hann window (rectangular)
peterf@2 359 hann_w = 0;
peterf@2 360 D = stft(y_in, nfft, hann_w, hop_length, sr);
peterf@2 361 Dinv = istft(D, nfft, hann_w, hop_length);
peterf@2 362
peterf@2 363 counter = counter + 1;
peterf@2 364 filename = sprintf('%s/core-istft-%03d.mat', output_path, counter);
peterf@2 365 display([' `-- saving ', filename]);
peterf@2 366 save(filename, 'D', 'Dinv', 'nfft', 'hann_w', 'hop_length');
peterf@2 367
peterf@2 368 % And again with default hann window (nfft)
peterf@2 369 hann_w = nfft;
peterf@2 370 D = stft(y_in, nfft, hann_w, hop_length, sr);
peterf@2 371 Dinv = istft(D, nfft, hann_w, hop_length);
peterf@2 372
peterf@2 373 counter = counter + 1;
peterf@2 374 filename = sprintf('%s/core-istft-%03d.mat', output_path, counter);
peterf@2 375 display([' `-- saving ', filename]);
peterf@2 376 save(filename, 'D', 'Dinv', 'nfft', 'hann_w', 'hop_length');
peterf@2 377 end
peterf@2 378 end
peterf@2 379 end
peterf@2 380
peterf@2 381 function testBeat(output_path)
peterf@2 382
peterf@2 383 wavfile = 'data/test2_8000.wav';
peterf@2 384
peterf@2 385 [y, sr] = wavread(wavfile);
peterf@2 386 y = mean(y, 2); % Convert to mono
peterf@2 387
peterf@2 388 % Generate the onset envelope first
peterf@2 389 [t, xcr, D, onsetenv, oesr] = tempo2(y, sr);
peterf@2 390
peterf@2 391 filename = sprintf('%s/beat-onset-000.mat', output_path);
peterf@2 392 display([' `-- saving ', filename]);
peterf@2 393 save(filename, 'wavfile', 'onsetenv', 'D');
peterf@2 394
peterf@2 395 filename = sprintf('%s/beat-tempo-000.mat', output_path);
peterf@2 396 display([' `-- saving ', filename]);
peterf@2 397 save(filename, 'wavfile', 't', 'onsetenv');
peterf@2 398
peterf@2 399 [beats, onsetenv_out, D, cumscore] = beat2(onsetenv, oesr);
peterf@2 400 filename = sprintf('%s/beat-beat-000.mat', output_path);
peterf@2 401 display([' `-- saving ', filename]);
peterf@2 402 save(filename, 'wavfile', 'beats', 'onsetenv');
peterf@2 403
peterf@2 404 end
peterf@2 405
peterf@2 406 function testChromafb(output_path)
peterf@2 407
peterf@2 408 % Test three sample rates
peterf@2 409 P_SR = [8000, 11025, 22050];
peterf@2 410
peterf@2 411 % Two FFT lengths
peterf@2 412 P_NFFT = [256, 512];
peterf@2 413
peterf@2 414 % Two filter bank sizes
peterf@2 415 P_NCHROMA = [12, 24];
peterf@2 416
peterf@2 417 % Two A440s
peterf@2 418 P_A440 = [435.0, 440.0];
peterf@2 419
peterf@2 420 % Two center octaves
peterf@2 421 P_CTROCT = [4.0, 5.0];
peterf@2 422
peterf@2 423 % Two octave widths
peterf@2 424 P_OCTWIDTH = [0, 2.0];
peterf@2 425
peterf@2 426 % Generate tests
peterf@2 427 counter = 0;
peterf@2 428
peterf@2 429 for sr = P_SR
peterf@2 430 for nfft = P_NFFT
peterf@2 431 for nchroma = P_NCHROMA
peterf@2 432 for a440 = P_A440
peterf@2 433 for ctroct = P_CTROCT
peterf@2 434 for octwidth = P_OCTWIDTH
peterf@2 435
peterf@2 436 % Run the function
peterf@2 437 wts = fft2chromamx(nfft, nchroma, sr, a440, ctroct, octwidth);
peterf@2 438
peterf@2 439 % save the output
peterf@2 440 counter = counter + 1;
peterf@2 441
peterf@2 442 filename = sprintf('%s/feature-chromafb-%03d.mat', output_path, counter);
peterf@2 443 display([' `-- saving ', filename]);
peterf@2 444
peterf@2 445 save(filename, ...
peterf@2 446 'sr', 'nfft', 'nchroma', 'a440', ...
peterf@2 447 'ctroct', 'octwidth', 'wts');
peterf@2 448 end
peterf@2 449 end
peterf@2 450 end
peterf@2 451 end
peterf@2 452 end
peterf@2 453 end
peterf@2 454 end