jamie@62: #N canvas 737 25 578 583 10; jamie@62: #N canvas 116 214 598 221 guts 0; jamie@25: #X obj 318 37 loadbang; jamie@25: #X obj 318 64 f \$0; jamie@25: #N canvas 0 0 450 300 dacs 0; jamie@25: #X obj 164 152 a_output~; jamie@25: #X msg 251 100 0; jamie@25: #X obj 249 59 r \$0-master-lvl-stereo; jamie@25: #X obj 251 81 r \$0-master-lvl-mute; jamie@25: #X obj 251 120 s \$0-master-lvl-stereo; jamie@25: #X obj 174 110 inlet~; jamie@25: #X connect 1 0 0 2; jamie@25: #X connect 1 0 4 0; jamie@25: #X connect 2 0 0 2; jamie@25: #X connect 3 0 1 0; jamie@25: #X connect 5 0 0 0; jamie@25: #X connect 5 0 0 1; jamie@25: #X restore 85 126 pd dacs; jamie@25: #X obj 16 24 r \$0-fund; jamie@25: #X msg 318 88 \; pd dsp 1 \; \$1-master-lvl-stereo 60 \; \$1-window-gen jamie@25: bang \; \$1-mfcc xticks 0 5 5 \; \$1-mfcc yticks 0 50 1 \; \$1-mfcc jamie@25: xlabel -120 0 5 10 15 20; jamie@25: #N canvas 308 141 679 510 paf 0; jamie@25: #X obj 331 95 / 10; jamie@25: #X obj 331 120 pack 0 50; jamie@25: #X obj 139 412 fexpr~ $x1 * $x2; jamie@25: #X obj 241 188 cos~; jamie@25: #X obj 241 166 expr~ ($v1 * 0.5) - 0.25; jamie@25: #X obj 380 197 *~ 256; jamie@25: #X obj 462 209 line~; jamie@25: #X obj 462 189 pack 0 50; jamie@25: #X obj 289 194 *~; jamie@25: #X obj 282 216 +~ 256; jamie@25: #X obj 118 328 cos~; jamie@25: #X obj 118 305 *~; jamie@25: #X obj 161 328 cos~; jamie@25: #X obj 161 305 +~; jamie@25: #X obj 154 358 -~; jamie@25: #X obj 174 390 *~; jamie@25: #X obj 136 390 +~; jamie@25: #X obj 230 291 wrap~; jamie@25: #X obj 199 291 -~; jamie@25: #X obj 199 259 samphold~; jamie@25: #X obj 331 142 line~; jamie@25: #X obj 138 438 outlet~; jamie@25: #X obj 462 167 inlet bandwidth; jamie@25: #X obj 47 121 phasor~; jamie@25: #X obj 48 100 line~; jamie@25: #X msg 47 78 \$1 20; jamie@25: #X obj 48 57 inlet fund; jamie@25: #X obj 331 73 inlet cf; jamie@25: #X obj 282 316 tabread4~ \$0-hann; jamie@25: #X obj 466 426 table \$0-hann; jamie@27: #N canvas 0 0 450 300 hann 0; jamie@27: #X obj 136 98 samplerate~; jamie@27: #X obj 139 166 phasor~; jamie@27: #X msg 225 96 0; jamie@27: #X obj 139 195 expr~ 0.5 - cos($v1 * 6.28) * 0.5; jamie@27: #X obj 114 51 t b b b b; jamie@27: #X obj 114 23 inlet; jamie@27: #X obj 261 117 s \$0-hann; jamie@27: #X obj 139 220 tabwrite~ \$0-hann; jamie@27: #X msg 259 93 resize 512; jamie@27: #X obj 136 120 /~ 512; jamie@27: #X connect 0 0 9 0; jamie@27: #X connect 1 0 3 0; jamie@27: #X connect 2 0 1 1; jamie@27: #X connect 3 0 7 0; jamie@27: #X connect 4 0 7 0; jamie@27: #X connect 4 1 2 0; jamie@27: #X connect 4 2 0 0; jamie@27: #X connect 4 3 8 0; jamie@27: #X connect 5 0 4 0; jamie@27: #X connect 8 0 6 0; jamie@27: #X connect 9 0 1 0; jamie@27: #X restore 466 390 pd hann; jamie@27: #X obj 466 362 r \$0-window-gen; jamie@25: #X connect 0 0 1 0; jamie@25: #X connect 1 0 20 0; jamie@25: #X connect 2 0 21 0; jamie@25: #X connect 3 0 8 0; jamie@25: #X connect 4 0 3 0; jamie@25: #X connect 5 0 8 1; jamie@25: #X connect 6 0 5 0; jamie@25: #X connect 7 0 6 0; jamie@25: #X connect 8 0 9 0; jamie@25: #X connect 9 0 28 0; jamie@25: #X connect 10 0 14 1; jamie@25: #X connect 10 0 16 0; jamie@25: #X connect 11 0 13 0; jamie@25: #X connect 11 0 10 0; jamie@25: #X connect 12 0 14 0; jamie@25: #X connect 13 0 12 0; jamie@25: #X connect 14 0 15 0; jamie@25: #X connect 15 0 16 1; jamie@25: #X connect 16 0 2 0; jamie@25: #X connect 17 0 18 1; jamie@25: #X connect 17 0 15 1; jamie@25: #X connect 18 0 11 1; jamie@25: #X connect 19 0 18 0; jamie@25: #X connect 19 0 17 0; jamie@25: #X connect 20 0 19 0; jamie@25: #X connect 22 0 7 0; jamie@25: #X connect 23 0 19 1; jamie@25: #X connect 23 0 13 1; jamie@25: #X connect 23 0 11 0; jamie@25: #X connect 23 0 4 0; jamie@25: #X connect 24 0 23 0; jamie@25: #X connect 25 0 24 0; jamie@25: #X connect 26 0 25 0; jamie@25: #X connect 27 0 0 0; jamie@25: #X connect 28 0 2 1; jamie@27: #X connect 31 0 30 0; jamie@25: #X restore 35 80 pd paf; jamie@25: #X obj 85 25 r \$0-cf; jamie@25: #X obj 140 23 r \$0-bw; jamie@62: #X obj 145 127 r \$0-window-gen; jamie@62: #X obj 145 148 a_hann 1024; jamie@62: #N canvas 34 54 723 391 spectrum 0; jamie@62: #X obj 194 153 *~; jamie@62: #X obj 181 69 inlet~; jamie@62: #X obj 252 68 inlet~; jamie@62: #X obj 195 176 xtract~ spectrum; jamie@62: #N canvas 0 0 450 300 mag_spectrum 0; jamie@62: #X obj 260 64 block~ 512; jamie@62: #N canvas 0 0 450 300 (subpatch) 0; jamie@62: #X array mag_spectrum 512 float 3; jamie@62: #A 0 0.0347679 0.0238386 0.0342933 0.0362505 0.0295941 0.0500627 0.0356107 jamie@62: 0.0419818 0.0507073 0.0290984 0.0416723 0.0321575 0.0192698 0.0252058 jamie@62: 0.0116167 0.00836482 0.00784646 0.00138145 0.00132721 0.000381971 0.000573959 jamie@62: 0.000406984 0.000280216 0.000179901 0.000186049 0.000268997 0.000263714 jamie@62: 0.000155282 0.000139129 0.000167519 0.000124361 0.000180699 0.000142076 jamie@62: 0.000144225 0.000119736 0.000148186 0.000111046 0.000121504 0.000107089 jamie@62: 0.000121003 9.47739e-05 0.000125579 0.000100434 0.000104701 9.41711e-05 jamie@62: 0.000104671 8.29275e-05 9.69602e-05 8.842e-05 9.28634e-05 8.08756e-05 jamie@62: 9.55736e-05 7.85888e-05 8.25423e-05 7.83809e-05 8.18489e-05 7.07095e-05 jamie@62: 8.02309e-05 7.42804e-05 7.48963e-05 6.96933e-05 7.65881e-05 6.52446e-05 jamie@62: 6.90523e-05 6.72559e-05 6.77385e-05 6.22041e-05 6.80202e-05 6.33565e-05 jamie@62: 6.27514e-05 6.09007e-05 6.3778e-05 5.64576e-05 5.99506e-05 5.87628e-05 jamie@62: 5.80413e-05 5.54242e-05 5.86565e-05 5.49603e-05 5.42429e-05 5.4014e-05 jamie@62: 5.47262e-05 5.03136e-05 5.31452e-05 5.20179e-05 5.08749e-05 4.98008e-05 jamie@62: 5.13611e-05 4.85163e-05 4.80735e-05 4.85478e-05 4.80833e-05 4.56452e-05 jamie@62: 4.77271e-05 4.64662e-05 4.53934e-05 4.50956e-05 4.56013e-05 4.35624e-05 jamie@62: 4.34772e-05 4.40007e-05 4.30346e-05 4.18994e-05 4.31475e-05 4.18919e-05 jamie@62: 4.11025e-05 4.11284e-05 4.10175e-05 3.97421e-05 3.98145e-05 4.01797e-05 jamie@62: 3.90583e-05 3.87068e-05 3.92256e-05 3.81535e-05 3.76564e-05 3.77768e-05 jamie@62: 3.73499e-05 3.66974e-05 3.67557e-05 3.68833e-05 3.58508e-05 3.59041e-05 jamie@62: 3.58715e-05 3.51094e-05 3.48463e-05 3.49077e-05 3.43984e-05 3.41789e-05 jamie@62: 3.40861e-05 3.40455e-05 3.32054e-05 3.34367e-05 3.30168e-05 3.26526e-05 jamie@62: 3.24827e-05 3.24396e-05 3.19881e-05 3.19942e-05 3.17211e-05 3.16122e-05 jamie@62: 3.10021e-05 3.12408e-05 3.06344e-05 3.06429e-05 3.04321e-05 3.03029e-05 jamie@62: 2.99668e-05 3.00742e-05 2.95874e-05 2.95749e-05 2.91166e-05 2.92872e-05 jamie@62: 2.87315e-05 2.88123e-05 2.86934e-05 2.84017e-05 2.82494e-05 2.83481e-05 jamie@62: 2.76694e-05 2.7905e-05 2.74856e-05 2.7595e-05 2.70659e-05 2.73785e-05 jamie@62: 2.70175e-05 2.68042e-05 2.67559e-05 2.67275e-05 2.61115e-05 2.64444e-05 jamie@62: 2.60253e-05 2.6143e-05 2.56633e-05 2.59967e-05 2.55765e-05 2.54011e-05 jamie@62: 2.54205e-05 2.52767e-05 2.48309e-05 2.51035e-05 2.48111e-05 2.47337e-05 jamie@62: 2.44776e-05 2.47857e-05 2.41466e-05 2.42557e-05 2.41419e-05 2.40363e-05 jamie@62: 2.36974e-05 2.39439e-05 2.36521e-05 2.35678e-05 2.34062e-05 2.3597e-05 jamie@62: 2.29854e-05 2.32039e-05 2.30333e-05 2.29341e-05 2.27001e-05 2.29057e-05 jamie@62: 2.25917e-05 2.25413e-05 2.24169e-05 2.25144e-05 2.1993e-05 2.22539e-05 jamie@62: 2.20491e-05 2.19648e-05 2.18146e-05 2.19472e-05 2.16342e-05 2.16211e-05 jamie@62: 2.15227e-05 2.15229e-05 2.11552e-05 2.13981e-05 2.1145e-05 2.11307e-05 jamie@62: 2.10028e-05 2.10558e-05 2.07771e-05 2.08104e-05 2.06922e-05 2.06572e-05 jamie@62: 2.0421e-05 2.06044e-05 2.03378e-05 2.03852e-05 2.0236e-05 2.02428e-05 jamie@62: 2.00298e-05 2.00682e-05 1.99341e-05 1.99055e-05 1.9766e-05 1.98595e-05 jamie@62: 1.96149e-05 1.9708e-05 1.95175e-05 1.951e-05 1.93652e-05 1.93882e-05 jamie@62: 1.9253e-05 1.92475e-05 1.91492e-05 1.91725e-05 1.89653e-05 1.90797e-05 jamie@62: 1.88526e-05 1.88553e-05 1.87737e-05 1.87674e-05 1.86322e-05 1.86603e-05 jamie@62: 1.85738e-05 1.8523e-05 1.84042e-05 1.84821e-05 1.82465e-05 1.82856e-05 jamie@62: 1.82333e-05 1.81908e-05 1.80772e-05 1.81247e-05 1.80205e-05 1.79422e-05 jamie@62: 1.78919e-05 1.79356e-05 1.76952e-05 1.77907e-05 1.77256e-05 1.76545e-05 jamie@62: 1.75951e-05 1.76011e-05 1.75059e-05 1.74307e-05 1.74315e-05 1.73783e-05 jamie@62: 1.72885e-05 1.72999e-05 1.72644e-05 1.71807e-05 1.71397e-05 1.71261e-05 jamie@62: 1.70455e-05 1.6948e-05 1.70073e-05 1.6948e-05 1.6794e-05 1.69151e-05 jamie@62: 1.68262e-05 1.6732e-05 1.67057e-05 1.67527e-05 1.65599e-05 1.65856e-05 jamie@62: 1.65865e-05 1.65142e-05 1.64285e-05 1.65163e-05 1.63755e-05 1.63693e-05 jamie@62: 1.63267e-05 1.62936e-05 1.62273e-05 1.6209e-05 1.62148e-05 1.61265e-05 jamie@62: 1.61024e-05 1.61131e-05 1.60167e-05 1.60016e-05 1.59628e-05 1.59332e-05 jamie@62: 1.58903e-05 1.58553e-05 1.58772e-05 1.57569e-05 1.57924e-05 1.57572e-05 jamie@62: 1.56537e-05 1.56966e-05 1.56074e-05 1.56212e-05 1.55779e-05 1.5539e-05 jamie@62: 1.55494e-05 1.5449e-05 1.5495e-05 1.54081e-05 1.53711e-05 1.53932e-05 jamie@62: 1.52964e-05 1.53376e-05 1.52897e-05 1.52396e-05 1.52538e-05 1.51629e-05 jamie@62: 1.52182e-05 1.50957e-05 1.51177e-05 1.51097e-05 1.50368e-05 1.50477e-05 jamie@62: 1.50399e-05 1.49629e-05 1.49619e-05 1.4934e-05 1.49109e-05 1.48107e-05 jamie@62: 1.49298e-05 1.48269e-05 1.47474e-05 1.48734e-05 1.47248e-05 1.47904e-05 jamie@62: 1.46943e-05 1.47132e-05 1.46267e-05 1.47303e-05 1.44649e-05 1.46803e-05 jamie@62: 1.45807e-05 1.45165e-05 1.45321e-05 1.45863e-05 1.44389e-05 1.44883e-05 jamie@62: 1.45138e-05 1.43366e-05 1.45488e-05 1.42999e-05 1.43532e-05 1.43481e-05 jamie@62: 1.44012e-05 1.40856e-05 1.4473e-05 1.42298e-05 1.42492e-05 1.42315e-05 jamie@62: 1.43224e-05 1.40978e-05 1.42317e-05 1.41411e-05 1.41222e-05 1.41452e-05 jamie@62: 1.40687e-05 1.4097e-05 1.40772e-05 1.40533e-05 1.4062e-05 1.39999e-05 jamie@62: 1.40167e-05 1.39786e-05 1.39683e-05 1.39479e-05 1.39503e-05 1.39196e-05 jamie@62: 1.39185e-05 1.3891e-05 1.38968e-05 1.38385e-05 1.38591e-05 1.38226e-05 jamie@62: 1.3823e-05 1.37987e-05 1.38058e-05 1.37687e-05 1.37731e-05 1.37467e-05 jamie@62: 1.3741e-05 1.37012e-05 1.37238e-05 1.36772e-05 1.36989e-05 1.36648e-05 jamie@62: 1.36677e-05 1.36383e-05 1.36465e-05 1.36082e-05 1.36107e-05 1.35828e-05 jamie@62: 1.36001e-05 1.35517e-05 1.35862e-05 1.35436e-05 1.3545e-05 1.35258e-05 jamie@62: 1.35259e-05 1.34894e-05 1.35036e-05 1.34777e-05 1.34856e-05 1.34502e-05 jamie@62: 1.34863e-05 1.34282e-05 1.34469e-05 1.34125e-05 1.34237e-05 1.34026e-05 jamie@62: 1.33887e-05 1.34055e-05 1.33624e-05 1.33684e-05 1.34108e-05 1.32959e-05 jamie@62: 1.33875e-05 1.32811e-05 1.33619e-05 1.33219e-05 1.3276e-05 1.33497e-05 jamie@62: 1.32483e-05 1.33257e-05 1.3305e-05 1.32275e-05 1.33069e-05 1.32249e-05 jamie@62: 1.32866e-05 1.32339e-05 1.32487e-05 1.3251e-05 1.32172e-05 1.32353e-05 jamie@62: 1.323e-05 1.31875e-05 1.32223e-05 1.319e-05 1.32038e-05 1.31846e-05 jamie@62: 1.31983e-05 1.31761e-05 1.31802e-05 1.31635e-05 1.31737e-05 1.31439e-05 jamie@62: 1.31682e-05 1.31427e-05 1.31617e-05 1.31332e-05 1.31547e-05 1.3133e-05 jamie@62: 1.31335e-05 1.31252e-05 1.31203e-05 1.31178e-05 1.313e-05 1.31048e-05 jamie@62: 1.31309e-05 1.30961e-05 1.31287e-05 1.30943e-05 1.31076e-05 1.3093e-05 jamie@62: 1.30996e-05 1.30943e-05 1.3103e-05 1.30871e-05 1.31077e-05 1.30727e-05 jamie@62: 1.31072e-05 1.30737e-05 1.3094e-05 1.30748e-05 1.30877e-05 1.30874e-05 jamie@62: 1.30868e-05 1.30789e-05 1.30949e-05 1.30709e-05 1.30856e-05; jamie@62: #X coords 0 1 511 0 200 140 1; jamie@62: #X restore 125 121 graph; jamie@62: #X restore 358 92 pd mag_spectrum; jamie@62: #X obj 195 211 tabsend~ mag_spectrum; jamie@62: #X obj 357 64 block~ 1024; jamie@62: #X obj 197 301 xtract~ mfcc; jamie@62: #X obj 196 274 tabreceive~ mag_spectrum; jamie@62: #X obj 197 333 tabsend~ \$0-mfcc; jamie@62: #X connect 0 0 3 0; jamie@62: #X connect 1 0 0 0; jamie@62: #X connect 2 0 0 1; jamie@62: #X connect 3 0 5 0; jamie@62: #X connect 7 0 9 0; jamie@62: #X connect 8 0 7 0; jamie@62: #X restore 32 167 pd spectrum; jamie@25: #X connect 0 0 1 0; jamie@62: #X connect 1 0 4 0; jamie@62: #X connect 3 0 5 0; jamie@62: #X connect 5 0 2 0; jamie@62: #X connect 5 0 10 0; jamie@62: #X connect 6 0 5 1; jamie@62: #X connect 7 0 5 2; jamie@62: #X connect 8 0 9 0; jamie@62: #X connect 9 0 10 1; jamie@25: #X restore 516 -222 pd guts; jamie@25: #X obj 6 -225 cnv 15 500 200 empty empty MFCC 20 12 0 14 -261681 -66577 jamie@25: 0; jamie@25: #X obj 184 -202 cnv 15 250 150 empty empty empty 20 12 0 14 -262131 jamie@25: -66577 0; jamie@25: #X obj 465 -187 vsl 10 100 0 127 0 0 \$0-master-lvl-stereo \$0-master-lvl-stereo jamie@62: out -4 -8 0 8 -262131 -1 -1 0 1; jamie@25: #X obj 465 -77 bng 10 250 50 0 \$0-master-lvl-mute empty mute -6 16 jamie@25: 0 8 -262131 -1 -1; jamie@27: #X obj 32 -114 hsl 128 15 20 150 0 0 \$0-cf empty centre_frequency jamie@62: -2 -6 0 8 -225271 -1 -1 700 1; jamie@25: #X obj 33 -153 hsl 128 15 80 2000 0 0 \$0-fund empty fundamental -2 jamie@62: -6 0 8 -225271 -1 -1 200 1; jamie@25: #X text 19 7 Notes:; jamie@25: #X text 20 87 [xtract~ mfcc] outputs a series 20 Mel-Frequency Cepstral jamie@25: Coefficients. When it is instantiated \, an initialisation function jamie@25: creates a bank of 20 mel-spaced filters \, between 80Hz and 1800Hz jamie@25: on a linear scale. All filters have the same gain; jamie@25: #X text 23 255 With LibXtract it is possible to change the number of jamie@25: Mel filters as well as the range of frequencies over which they operate jamie@25: \, and the filter scaling (equal area/equal gain). With this PD example jamie@25: \, sensible defaults have been chosen to improve usability; jamie@62: #N canvas 0 0 450 300 (subpatch) 0; jamie@62: #X array \$0-mfcc 20 float 1; jamie@62: #A 0 -226.816 39.0179 27.0649 13.3895 3.18296 -4.35309 -6.98078 -6.73432 jamie@62: -4.09373 -1.24401 0.693745 0.961352 0.393719 -0.854615 -1.49734 -1.75847 jamie@62: -1.32051 -0.652124 0.00802549 0.234184; jamie@62: #X coords 0 50 19 -500 200 100 1; jamie@25: #X restore 212 -178 graph; jamie@25: #X text 28 -188 PAF synthesiser; jamie@27: #X obj 34 -71 hsl 128 15 1 10 0 0 \$0-bw empty formant_bandwidth -2 jamie@62: -6 0 8 -225271 -1 -1 600 1; jamie@62: #X text 20 36 In this patch [xtract~ spectrum] is first used to extract jamie@62: the magnitude spectrum from an audio signal in overlapping blocks of jamie@62: 1024 samples.; jamie@62: #X text 23 165 Whilst DSP is running the input vector (magnitude spectrum) jamie@62: is filtered by this filterbank \, and the total energy output from jamie@62: each filter is appended to a new vector. This new vector (mel-filtered jamie@62: spectrum) is then subjected to a fast cosine transform. The output jamie@62: can be visualised in the graph labelled \$0-mfcc.;