To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.
root / Vamp.ipynb @ 13:5d1a74cc6f59
History | View | Annotate | Download (74.1 KB)
| 1 |
{
|
|---|---|
| 2 |
"cells": [ |
| 3 |
{
|
| 4 |
"cell_type": "markdown", |
| 5 |
"metadata": {},
|
| 6 |
"source": [ |
| 7 |
"# Using Vamp plugins from Python\n", |
| 8 |
"This notebook illustrates processing an audio file using a Vamp plugin, showing the results in a simple plot, and saving to a .csv file. This could be useful when integrating with analysis software written in Python, or for a batch process. (Note that it is also possible to run Vamp plugins in batch using the [Sonic Annotator](http://vamp-plugins.org/sonic-annotator) command-line program.)" |
| 9 |
] |
| 10 |
}, |
| 11 |
{
|
| 12 |
"cell_type": "markdown", |
| 13 |
"metadata": {},
|
| 14 |
"source": [ |
| 15 |
"### Setup\n", |
| 16 |
"\n", |
| 17 |
"First we import some necessary modules.\n", |
| 18 |
"\n", |
| 19 |
"The `vamp` module loads and runs Vamp plugins. `librosa` is an audio analysis module from LabROSA at Columbia University. We are using it here only to load audio files, though it can also carry out some analysis functions. `matplotlib` is the usual plotting library." |
| 20 |
] |
| 21 |
}, |
| 22 |
{
|
| 23 |
"cell_type": "code", |
| 24 |
"execution_count": 1, |
| 25 |
"metadata": {
|
| 26 |
"collapsed": false |
| 27 |
}, |
| 28 |
"outputs": [], |
| 29 |
"source": [ |
| 30 |
"import vamp\n", |
| 31 |
"import librosa\n", |
| 32 |
"import matplotlib.pyplot as plt\n", |
| 33 |
"%matplotlib inline" |
| 34 |
] |
| 35 |
}, |
| 36 |
{
|
| 37 |
"cell_type": "markdown", |
| 38 |
"metadata": {},
|
| 39 |
"source": [ |
| 40 |
"### Getting started with the Vamp module\n", |
| 41 |
"\n", |
| 42 |
"List the plugins that are installed. The strings that are returned here are referred to in the module documentation as _plugin keys_ -- each one consists of the name of the library file that contains the plugin, then a colon, then the identifier for the plugin itself. So a set of plugins with the same text before the colon (such as `qm-vamp-plugins:`) were all distributed in the same plugin library file.\n", |
| 43 |
"\n", |
| 44 |
"You can find plugin descriptions and downloads at http://vamp-plugins.org/download.html." |
| 45 |
] |
| 46 |
}, |
| 47 |
{
|
| 48 |
"cell_type": "code", |
| 49 |
"execution_count": 2, |
| 50 |
"metadata": {
|
| 51 |
"collapsed": false |
| 52 |
}, |
| 53 |
"outputs": [ |
| 54 |
{
|
| 55 |
"data": {
|
| 56 |
"text/plain": [ |
| 57 |
"['bbc-vamp-plugins:bbc-energy',\n", |
| 58 |
" 'bbc-vamp-plugins:bbc-intensity',\n", |
| 59 |
" 'bbc-vamp-plugins:bbc-peaks',\n", |
| 60 |
" 'bbc-vamp-plugins:bbc-rhythm',\n", |
| 61 |
" 'bbc-vamp-plugins:bbc-spectral-contrast',\n", |
| 62 |
" 'bbc-vamp-plugins:bbc-spectral-flux',\n", |
| 63 |
" 'bbc-vamp-plugins:bbc-speechmusic-segmenter',\n", |
| 64 |
" 'cepstral-pitchtracker:cepstral-pitchtracker',\n", |
| 65 |
" 'chp:constrainedharmonicpeak',\n", |
| 66 |
" 'cqvamp:cqchromavamp',\n", |
| 67 |
" 'cqvamp:cqvamp',\n", |
| 68 |
" 'cqvamp:cqvampmidi',\n", |
| 69 |
" 'match-vamp-plugin:match',\n", |
| 70 |
" 'nnls-chroma:chordino',\n", |
| 71 |
" 'nnls-chroma:nnls-chroma',\n", |
| 72 |
" 'nnls-chroma:tuning',\n", |
| 73 |
" 'pyin:localcandidatepyin',\n", |
| 74 |
" 'pyin:pyin',\n", |
| 75 |
" 'pyin:yin',\n", |
| 76 |
" 'pyin:yinfc',\n", |
| 77 |
" 'qm-vamp-plugins:qm-adaptivespectrogram',\n", |
| 78 |
" 'qm-vamp-plugins:qm-barbeattracker',\n", |
| 79 |
" 'qm-vamp-plugins:qm-chromagram',\n", |
| 80 |
" 'qm-vamp-plugins:qm-constantq',\n", |
| 81 |
" 'qm-vamp-plugins:qm-dwt',\n", |
| 82 |
" 'qm-vamp-plugins:qm-keydetector',\n", |
| 83 |
" 'qm-vamp-plugins:qm-mfcc',\n", |
| 84 |
" 'qm-vamp-plugins:qm-onsetdetector',\n", |
| 85 |
" 'qm-vamp-plugins:qm-segmenter',\n", |
| 86 |
" 'qm-vamp-plugins:qm-similarity',\n", |
| 87 |
" 'qm-vamp-plugins:qm-tempotracker',\n", |
| 88 |
" 'qm-vamp-plugins:qm-tonalchange',\n", |
| 89 |
" 'qm-vamp-plugins:qm-transcription',\n", |
| 90 |
" 'segmentino:segmentino',\n", |
| 91 |
" 'silvet:silvet',\n", |
| 92 |
" 'simple-cepstrum:simple-cepstrum',\n", |
| 93 |
" 'tempogram:tempogram',\n", |
| 94 |
" 'vamp-aubio:aubionotes',\n", |
| 95 |
" 'vamp-aubio:aubioonset',\n", |
| 96 |
" 'vamp-aubio:aubiopitch',\n", |
| 97 |
" 'vamp-aubio:aubiosilence',\n", |
| 98 |
" 'vamp-aubio:aubiotempo',\n", |
| 99 |
" 'vamp-example-plugins:amplitudefollower',\n", |
| 100 |
" 'vamp-example-plugins:fixedtempo',\n", |
| 101 |
" 'vamp-example-plugins:percussiononsets',\n", |
| 102 |
" 'vamp-example-plugins:powerspectrum',\n", |
| 103 |
" 'vamp-example-plugins:spectralcentroid',\n", |
| 104 |
" 'vamp-example-plugins:zerocrossing',\n", |
| 105 |
" 'vamp-libxtract:amdf',\n", |
| 106 |
" 'vamp-libxtract:asdf',\n", |
| 107 |
" 'vamp-libxtract:autocorrelation',\n", |
| 108 |
" 'vamp-libxtract:average_deviation',\n", |
| 109 |
" 'vamp-libxtract:bark_coefficients',\n", |
| 110 |
" 'vamp-libxtract:crest',\n", |
| 111 |
" 'vamp-libxtract:dct',\n", |
| 112 |
" 'vamp-libxtract:f0',\n", |
| 113 |
" 'vamp-libxtract:failsafe_f0',\n", |
| 114 |
" 'vamp-libxtract:flatness',\n", |
| 115 |
" 'vamp-libxtract:harmonic_spectrum',\n", |
| 116 |
" 'vamp-libxtract:highest_value',\n", |
| 117 |
" 'vamp-libxtract:irregularity_j',\n", |
| 118 |
" 'vamp-libxtract:irregularity_k',\n", |
| 119 |
" 'vamp-libxtract:kurtosis',\n", |
| 120 |
" 'vamp-libxtract:loudness',\n", |
| 121 |
" 'vamp-libxtract:lowest_value',\n", |
| 122 |
" 'vamp-libxtract:mean',\n", |
| 123 |
" 'vamp-libxtract:mfcc',\n", |
| 124 |
" 'vamp-libxtract:noisiness',\n", |
| 125 |
" 'vamp-libxtract:nonzero_count',\n", |
| 126 |
" 'vamp-libxtract:odd_even_ratio',\n", |
| 127 |
" 'vamp-libxtract:peak_spectrum',\n", |
| 128 |
" 'vamp-libxtract:rms_amplitude',\n", |
| 129 |
" 'vamp-libxtract:rolloff',\n", |
| 130 |
" 'vamp-libxtract:sharpness',\n", |
| 131 |
" 'vamp-libxtract:skewness',\n", |
| 132 |
" 'vamp-libxtract:smoothness',\n", |
| 133 |
" 'vamp-libxtract:spectral_centroid',\n", |
| 134 |
" 'vamp-libxtract:spectral_inharmonicity',\n", |
| 135 |
" 'vamp-libxtract:spectral_kurtosis',\n", |
| 136 |
" 'vamp-libxtract:spectral_skewness',\n", |
| 137 |
" 'vamp-libxtract:spectral_slope',\n", |
| 138 |
" 'vamp-libxtract:spectral_standard_deviation',\n", |
| 139 |
" 'vamp-libxtract:spectral_variance',\n", |
| 140 |
" 'vamp-libxtract:spectrum',\n", |
| 141 |
" 'vamp-libxtract:spread',\n", |
| 142 |
" 'vamp-libxtract:standard_deviation',\n", |
| 143 |
" 'vamp-libxtract:sum',\n", |
| 144 |
" 'vamp-libxtract:tonality',\n", |
| 145 |
" 'vamp-libxtract:tristimulus_1',\n", |
| 146 |
" 'vamp-libxtract:tristimulus_2',\n", |
| 147 |
" 'vamp-libxtract:tristimulus_3',\n", |
| 148 |
" 'vamp-libxtract:variance',\n", |
| 149 |
" 'vamp-libxtract:zcr',\n", |
| 150 |
" 'vamp-rubberband:rubberband',\n", |
| 151 |
" 'vamp-test-plugin:vamp-test-plugin',\n", |
| 152 |
" 'vamp-test-plugin:vamp-test-plugin-freq']" |
| 153 |
] |
| 154 |
}, |
| 155 |
"execution_count": 2, |
| 156 |
"metadata": {},
|
| 157 |
"output_type": "execute_result" |
| 158 |
} |
| 159 |
], |
| 160 |
"source": [ |
| 161 |
"vamp.list_plugins()" |
| 162 |
] |
| 163 |
}, |
| 164 |
{
|
| 165 |
"cell_type": "markdown", |
| 166 |
"metadata": {},
|
| 167 |
"source": [ |
| 168 |
"We'll be using the `librosa` module's `load` function to load the audio file. IPython will show documentation about a function if you just give its name with a \"?\" at the end." |
| 169 |
] |
| 170 |
}, |
| 171 |
{
|
| 172 |
"cell_type": "code", |
| 173 |
"execution_count": 3, |
| 174 |
"metadata": {
|
| 175 |
"collapsed": true |
| 176 |
}, |
| 177 |
"outputs": [], |
| 178 |
"source": [ |
| 179 |
"librosa.load?" |
| 180 |
] |
| 181 |
}, |
| 182 |
{
|
| 183 |
"cell_type": "markdown", |
| 184 |
"metadata": {},
|
| 185 |
"source": [ |
| 186 |
"And the main high-level Vamp module function to apply a plugin is called `collect`, because it runs a plugin and collects the results into a suitable structure rather than returning them individually." |
| 187 |
] |
| 188 |
}, |
| 189 |
{
|
| 190 |
"cell_type": "code", |
| 191 |
"execution_count": 4, |
| 192 |
"metadata": {
|
| 193 |
"collapsed": true |
| 194 |
}, |
| 195 |
"outputs": [], |
| 196 |
"source": [ |
| 197 |
"vamp.collect?" |
| 198 |
] |
| 199 |
}, |
| 200 |
{
|
| 201 |
"cell_type": "markdown", |
| 202 |
"metadata": {},
|
| 203 |
"source": [ |
| 204 |
"### Extracting some chroma features\n", |
| 205 |
"\n", |
| 206 |
"Load our simplest test audio file and assign the sample data to `data` and the sampling rate to `rate`." |
| 207 |
] |
| 208 |
}, |
| 209 |
{
|
| 210 |
"cell_type": "code", |
| 211 |
"execution_count": 5, |
| 212 |
"metadata": {
|
| 213 |
"collapsed": false |
| 214 |
}, |
| 215 |
"outputs": [], |
| 216 |
"source": [ |
| 217 |
"data, rate = librosa.load(\"/home/dm/data/piano-scale.wav\")" |
| 218 |
] |
| 219 |
}, |
| 220 |
{
|
| 221 |
"cell_type": "markdown", |
| 222 |
"metadata": {},
|
| 223 |
"source": [ |
| 224 |
"`librosa` defaults to mixing audio down to mono and resampling it to 22050 Hz. (The original file here was 44.1kHz.)" |
| 225 |
] |
| 226 |
}, |
| 227 |
{
|
| 228 |
"cell_type": "code", |
| 229 |
"execution_count": 6, |
| 230 |
"metadata": {
|
| 231 |
"collapsed": false |
| 232 |
}, |
| 233 |
"outputs": [ |
| 234 |
{
|
| 235 |
"data": {
|
| 236 |
"text/plain": [ |
| 237 |
"22050" |
| 238 |
] |
| 239 |
}, |
| 240 |
"execution_count": 6, |
| 241 |
"metadata": {},
|
| 242 |
"output_type": "execute_result" |
| 243 |
} |
| 244 |
], |
| 245 |
"source": [ |
| 246 |
"rate" |
| 247 |
] |
| 248 |
}, |
| 249 |
{
|
| 250 |
"cell_type": "markdown", |
| 251 |
"metadata": {},
|
| 252 |
"source": [ |
| 253 |
"Run the `nnls-chroma` Chromagram plugin with some predefined parameters that make the output better suited to this type of sung performance." |
| 254 |
] |
| 255 |
}, |
| 256 |
{
|
| 257 |
"cell_type": "code", |
| 258 |
"execution_count": 7, |
| 259 |
"metadata": {
|
| 260 |
"collapsed": true |
| 261 |
}, |
| 262 |
"outputs": [], |
| 263 |
"source": [ |
| 264 |
"plugin_params = { \"tuningmode\": 1, \"s\": 0.9, \"chromanormalize\": 3 }\n",
|
| 265 |
"out = vamp.collect(data, rate,\n", |
| 266 |
" \"nnls-chroma:nnls-chroma\",\n", |
| 267 |
" output = \"chroma\",\n", |
| 268 |
" parameters = plugin_params,\n", |
| 269 |
" process_timestamp_method = vamp.vampyhost.SHIFT_DATA)" |
| 270 |
] |
| 271 |
}, |
| 272 |
{
|
| 273 |
"cell_type": "markdown", |
| 274 |
"metadata": {},
|
| 275 |
"source": [ |
| 276 |
"Because the output is grid-like, it comes back in a dictionary element labelled `matrix`. (Other types of features might appear in elements keyed `list` or `vector`.)" |
| 277 |
] |
| 278 |
}, |
| 279 |
{
|
| 280 |
"cell_type": "code", |
| 281 |
"execution_count": 8, |
| 282 |
"metadata": {
|
| 283 |
"collapsed": false |
| 284 |
}, |
| 285 |
"outputs": [ |
| 286 |
{
|
| 287 |
"data": {
|
| 288 |
"text/plain": [ |
| 289 |
"{'matrix': ( 0.092879819,\n",
|
| 290 |
" array([[ 0.00000000e+00, 3.96183506e-02, 5.59634191e-06,\n", |
| 291 |
" 9.80212271e-01, 9.50951222e-03, 0.00000000e+00,\n", |
| 292 |
" 0.00000000e+00, 1.64221078e-01, 9.96671245e-02,\n", |
| 293 |
" 0.00000000e+00, 2.49366909e-02, 0.00000000e+00],\n", |
| 294 |
" [ 0.00000000e+00, 3.14768031e-02, 1.75984693e-04,\n", |
| 295 |
" 9.78159189e-01, 3.25909108e-02, 0.00000000e+00,\n", |
| 296 |
" 2.30609346e-03, 1.62029296e-01, 1.21404052e-01,\n", |
| 297 |
" 0.00000000e+00, 1.24034006e-02, 0.00000000e+00],\n", |
| 298 |
" [ 0.00000000e+00, 3.00293174e-02, 1.04208666e-04,\n", |
| 299 |
" 9.80654418e-01, 1.40835987e-02, 0.00000000e+00,\n", |
| 300 |
" 9.72091779e-03, 1.61765605e-01, 1.04315229e-01,\n", |
| 301 |
" 0.00000000e+00, 8.51495471e-03, 0.00000000e+00],\n", |
| 302 |
" [ 5.58172017e-02, 2.38443669e-02, 2.34000312e-04,\n", |
| 303 |
" 9.85957861e-01, 0.00000000e+00, 8.80018866e-04,\n", |
| 304 |
" 1.73837524e-02, 1.46617860e-01, 2.19772030e-02,\n", |
| 305 |
" 4.21470292e-02, 1.19824708e-02, 0.00000000e+00],\n", |
| 306 |
" [ 1.04891717e-01, 0.00000000e+00, 0.00000000e+00,\n", |
| 307 |
" 8.22632074e-01, 0.00000000e+00, 5.40932655e-01,\n", |
| 308 |
" 2.50055622e-02, 9.16119367e-02, 1.97595134e-02,\n", |
| 309 |
" 1.00487642e-01, 3.59625043e-03, 1.21216252e-02],\n", |
| 310 |
" [ 4.19154391e-02, 0.00000000e+00, 0.00000000e+00,\n", |
| 311 |
" 5.32641768e-01, 0.00000000e+00, 8.34550500e-01,\n", |
| 312 |
" 1.78163499e-02, 4.51262072e-02, 3.18071060e-02,\n", |
| 313 |
" 1.09734185e-01, 5.05775325e-02, 9.80067346e-03],\n", |
| 314 |
" [ 8.45817477e-03, 0.00000000e+00, 0.00000000e+00,\n", |
| 315 |
" 3.46328199e-01, 1.50652148e-03, 9.27628160e-01,\n", |
| 316 |
" 7.37145077e-03, 2.01034341e-02, 2.88060121e-02,\n", |
| 317 |
" 1.09431930e-01, 7.88083300e-02, 3.81295639e-03],\n", |
| 318 |
" [ 7.57061178e-04, 0.00000000e+00, 0.00000000e+00,\n", |
| 319 |
" 1.79450929e-01, 7.06918363e-04, 9.73997951e-01,\n", |
| 320 |
" 1.11817075e-02, 1.11173289e-02, 1.42024746e-02,\n", |
| 321 |
" 1.05667278e-01, 8.66511092e-02, 0.00000000e+00],\n", |
| 322 |
" [ 1.66557424e-04, 0.00000000e+00, 0.00000000e+00,\n", |
| 323 |
" 5.85122555e-02, 0.00000000e+00, 9.89142478e-01,\n", |
| 324 |
" 0.00000000e+00, 1.83677338e-02, 1.94070749e-02,\n", |
| 325 |
" 1.07398190e-01, 7.69757330e-02, 0.00000000e+00],\n", |
| 326 |
" [ 1.33603302e-04, 7.56049762e-03, 9.44653377e-02,\n", |
| 327 |
" 0.00000000e+00, 0.00000000e+00, 8.86209607e-01,\n", |
| 328 |
" 0.00000000e+00, 4.42017853e-01, 3.05217896e-02,\n", |
| 329 |
" 6.33440912e-02, 0.00000000e+00, 7.29915053e-02],\n", |
| 330 |
" [ 1.31344637e-02, 6.74641272e-03, 6.19773604e-02,\n", |
| 331 |
" 0.00000000e+00, 0.00000000e+00, 5.67795098e-01,\n", |
| 332 |
" 0.00000000e+00, 8.15740764e-01, 2.10058820e-02,\n", |
| 333 |
" 8.59908853e-03, 2.03802586e-02, 8.47699121e-02],\n", |
| 334 |
" [ 4.31742333e-02, 6.34776312e-04, 4.03779112e-02,\n", |
| 335 |
" 0.00000000e+00, 0.00000000e+00, 3.56203526e-01,\n", |
| 336 |
" 0.00000000e+00, 9.28523540e-01, 1.56202829e-02,\n", |
| 337 |
" 0.00000000e+00, 2.54803859e-02, 8.10868144e-02],\n", |
| 338 |
" [ 7.33416453e-02, 6.10207790e-04, 3.63620482e-02,\n", |
| 339 |
" 0.00000000e+00, 0.00000000e+00, 1.90394685e-01,\n", |
| 340 |
" 0.00000000e+00, 9.74134862e-01, 0.00000000e+00,\n", |
| 341 |
" 0.00000000e+00, 3.36330868e-02, 8.35358649e-02],\n", |
| 342 |
" [ 8.68175179e-02, 4.59923962e-04, 4.55667712e-02,\n", |
| 343 |
" 0.00000000e+00, 0.00000000e+00, 5.53725436e-02,\n", |
| 344 |
" 0.00000000e+00, 9.90521610e-01, 0.00000000e+00,\n", |
| 345 |
" 0.00000000e+00, 2.28140820e-02, 7.52759054e-02],\n", |
| 346 |
" [ 7.16657341e-02, 4.01280413e-04, 3.66930221e-03,\n", |
| 347 |
" 1.17143869e-01, 0.00000000e+00, 5.73449535e-04,\n", |
| 348 |
" 1.10340128e-02, 9.86149371e-01, 8.01642612e-02,\n", |
| 349 |
" 0.00000000e+00, 0.00000000e+00, 4.57016900e-02],\n", |
| 350 |
" [ 1.75292313e-01, 2.99866367e-02, 2.26163003e-03,\n", |
| 351 |
" 2.27569297e-01, 1.22355169e-03, 5.50738396e-03,\n", |
| 352 |
" 1.99322440e-02, 7.56762922e-01, 5.85586488e-01,\n", |
| 353 |
" 0.00000000e+00, 0.00000000e+00, 2.34449375e-02],\n", |
| 354 |
" [ 2.28524700e-01, 3.58712561e-02, 1.71243155e-03,\n", |
| 355 |
" 1.92382932e-01, 2.56251148e-03, 1.83521770e-03,\n", |
| 356 |
" 1.90234929e-02, 4.48429823e-01, 8.41432989e-01,\n", |
| 357 |
" 0.00000000e+00, 0.00000000e+00, 2.25366023e-03],\n", |
| 358 |
" [ 2.01807901e-01, 3.38590480e-02, 1.47551834e-03,\n", |
| 359 |
" 1.39505953e-01, 2.78139487e-03, 0.00000000e+00,\n", |
| 360 |
" 1.72728095e-02, 2.58494407e-01, 9.33561742e-01,\n", |
| 361 |
" 0.00000000e+00, 0.00000000e+00, 0.00000000e+00],\n", |
| 362 |
" [ 1.54486820e-01, 7.73784667e-02, 1.31765660e-03,\n", |
| 363 |
" 1.13231450e-01, 2.59730266e-03, 0.00000000e+00,\n", |
| 364 |
" 1.56198768e-02, 1.29941836e-01, 9.69632685e-01,\n", |
| 365 |
" 0.00000000e+00, 0.00000000e+00, 0.00000000e+00],\n", |
| 366 |
" [ 1.27307251e-01, 1.46335721e-01, 7.25545781e-03,\n", |
| 367 |
" 7.30696917e-02, 1.78271742e-03, 1.15589984e-02,\n", |
| 368 |
" 1.46873388e-02, 4.01094109e-02, 9.77254152e-01,\n", |
| 369 |
" 0.00000000e+00, 0.00000000e+00, 0.00000000e+00],\n", |
| 370 |
" [ 0.00000000e+00, 6.90020472e-02, 1.04619361e-01,\n", |
| 371 |
" 2.25574453e-03, 1.59145258e-02, 8.51854533e-02,\n", |
| 372 |
" 1.19112572e-02, 3.24970409e-02, 8.37207317e-01,\n", |
| 373 |
" 2.33193655e-02, 5.23565531e-01, 0.00000000e+00],\n", |
| 374 |
" [ 0.00000000e+00, 1.16285585e-01, 8.28386694e-02,\n", |
| 375 |
" 4.62941173e-03, 4.11567613e-02, 5.65895252e-02,\n", |
| 376 |
" 8.86769406e-03, 3.56909982e-03, 4.53278363e-01,\n", |
| 377 |
" 5.48035838e-03, 8.76992047e-01, 0.00000000e+00],\n", |
| 378 |
" [ 0.00000000e+00, 9.20005813e-02, 8.02344233e-02,\n", |
| 379 |
" 8.05000402e-03, 3.36742140e-02, 5.60967438e-02,\n", |
| 380 |
" 7.82551430e-03, 0.00000000e+00, 2.42856011e-01,\n", |
| 381 |
" 6.69737998e-03, 9.60035205e-01, 0.00000000e+00],\n", |
| 382 |
" [ 0.00000000e+00, 7.55143240e-02, 8.95385593e-02,\n", |
| 383 |
" 3.87140960e-02, 3.20630148e-02, 5.86400889e-02,\n", |
| 384 |
" 6.61307480e-03, 0.00000000e+00, 1.47289321e-01,\n", |
| 385 |
" 4.46504587e-03, 9.79059339e-01, 0.00000000e+00],\n", |
| 386 |
" [ 0.00000000e+00, 4.65284958e-02, 9.54503566e-02,\n", |
| 387 |
" 7.55636320e-02, 2.02768482e-02, 6.72976896e-02,\n", |
| 388 |
" 6.64060842e-03, 0.00000000e+00, 7.32875690e-02,\n", |
| 389 |
" 2.12864988e-02, 9.86005127e-01, 0.00000000e+00],\n", |
| 390 |
" [ 2.27480695e-01, 1.48061270e-04, 4.33240458e-02,\n", |
| 391 |
" 4.05451693e-02, 5.41272797e-02, 3.53963836e-03,\n", |
| 392 |
" 1.43123539e-02, 2.27174252e-01, 1.35128703e-02,\n", |
| 393 |
" 4.26806398e-02, 9.42322731e-01, 0.00000000e+00],\n", |
| 394 |
" [ 7.76776791e-01, 0.00000000e+00, 0.00000000e+00,\n", |
| 395 |
" 1.39830112e-01, 5.90621345e-02, 1.34550305e-02,\n", |
| 396 |
" 3.04677673e-02, 1.83764696e-01, 1.57451490e-03,\n", |
| 397 |
" 1.49140116e-02, 5.81655204e-01, 1.22662485e-02],\n", |
| 398 |
" [ 9.20188725e-01, 0.00000000e+00, 0.00000000e+00,\n", |
| 399 |
" 1.31064311e-01, 5.43981604e-02, 1.02829840e-02,\n", |
| 400 |
" 3.28366272e-02, 1.60479397e-01, 5.82210999e-03,\n", |
| 401 |
" 0.00000000e+00, 3.25354755e-01, 1.69819649e-02],\n", |
| 402 |
" [ 9.54826117e-01, 0.00000000e+00, 0.00000000e+00,\n", |
| 403 |
" 9.08428431e-02, 5.47444709e-02, 6.06108643e-02,\n", |
| 404 |
" 3.60331088e-02, 1.57885537e-01, 8.70868936e-03,\n", |
| 405 |
" 0.00000000e+00, 2.16832116e-01, 8.11457261e-03],\n", |
| 406 |
" [ 9.67904508e-01, 0.00000000e+00, 0.00000000e+00,\n", |
| 407 |
" 5.66124916e-02, 5.64976968e-02, 1.21210851e-01,\n", |
| 408 |
" 2.68668532e-02, 1.64355755e-01, 8.75005964e-03,\n", |
| 409 |
" 0.00000000e+00, 1.18906729e-01, 1.10401204e-02],\n", |
| 410 |
" [ 9.10301447e-01, 0.00000000e+00, 3.58769596e-01,\n", |
| 411 |
" 1.06141847e-02, 4.18055579e-02, 1.46602526e-01,\n", |
| 412 |
" 3.75781283e-02, 9.09660384e-02, 4.86972043e-03,\n", |
| 413 |
" 9.57466140e-02, 1.99975297e-02, 2.24707602e-03],\n", |
| 414 |
" [ 5.32060623e-01, 0.00000000e+00, 8.38650227e-01,\n", |
| 415 |
" 9.16880462e-03, 2.60610454e-04, 3.36099528e-02,\n", |
| 416 |
" 3.72139849e-02, 2.78077163e-02, 5.88112846e-02,\n", |
| 417 |
" 8.20663422e-02, 3.43211927e-03, 0.00000000e+00],\n", |
| 418 |
" [ 2.87455589e-01, 4.98069823e-03, 9.52399135e-01,\n", |
| 419 |
" 6.48918562e-03, 1.46152833e-02, 1.27552811e-03,\n", |
| 420 |
" 3.50150615e-02, 3.32775675e-02, 6.14331104e-02,\n", |
| 421 |
" 6.25745878e-02, 0.00000000e+00, 0.00000000e+00],\n", |
| 422 |
" [ 1.61070168e-01, 2.89101936e-02, 9.81492460e-01,\n", |
| 423 |
" 6.82534417e-03, 3.21710929e-02, 0.00000000e+00,\n", |
| 424 |
" 3.05393245e-02, 2.94240247e-02, 2.76064500e-02,\n", |
| 425 |
" 7.77955577e-02, 1.41078653e-02, 0.00000000e+00],\n", |
| 426 |
" [ 8.16927180e-02, 1.41722690e-02, 9.86824512e-01,\n", |
| 427 |
" 5.50024817e-03, 4.24346775e-02, 0.00000000e+00,\n", |
| 428 |
" 3.15050706e-02, 3.23357843e-02, 0.00000000e+00,\n", |
| 429 |
" 1.10492811e-01, 5.67878336e-02, 0.00000000e+00],\n", |
| 430 |
" [ 3.24949324e-02, 7.84328091e-04, 9.87073660e-01,\n", |
| 431 |
" 2.14368682e-02, 8.19184780e-02, 0.00000000e+00,\n", |
| 432 |
" 4.47094291e-02, 4.51754816e-02, 0.00000000e+00,\n", |
| 433 |
" 7.68497959e-02, 8.66795331e-02, 0.00000000e+00],\n", |
| 434 |
" [ 4.58200509e-03, 5.83841407e-04, 7.21634507e-01,\n", |
| 435 |
" 6.54176593e-01, 6.88196672e-03, 1.98839861e-03,\n", |
| 436 |
" 3.12678553e-02, 4.32215557e-02, 2.30717957e-02,\n", |
| 437 |
" 0.00000000e+00, 2.02596277e-01, 8.24657977e-02],\n", |
| 438 |
" [ 0.00000000e+00, 1.26990424e-02, 2.43063316e-01,\n", |
| 439 |
" 9.57038879e-01, 3.64563279e-02, 4.62112296e-03,\n", |
| 440 |
" 0.00000000e+00, 2.28635445e-02, 2.43536122e-02,\n", |
| 441 |
" 0.00000000e+00, 1.47804081e-01, 2.28762515e-02],\n", |
| 442 |
" [ 0.00000000e+00, 3.60645875e-02, 9.64465961e-02,\n", |
| 443 |
" 9.83903885e-01, 7.15166628e-02, 2.05014925e-03,\n", |
| 444 |
" 0.00000000e+00, 1.82101205e-02, 3.92812900e-02,\n", |
| 445 |
" 1.10990333e-03, 1.14122525e-01, 3.62179205e-02],\n", |
| 446 |
" [ 0.00000000e+00, 3.63094509e-02, 4.21215966e-02,\n", |
| 447 |
" 9.86869931e-01, 2.13348027e-02, 1.17978109e-02,\n", |
| 448 |
" 0.00000000e+00, 1.84751991e-02, 3.91156673e-02,\n", |
| 449 |
" 0.00000000e+00, 1.19885072e-01, 7.84665942e-02],\n", |
| 450 |
" [ 0.00000000e+00, 3.17818783e-02, 1.20549006e-02,\n", |
| 451 |
" 9.88725364e-01, 1.00220414e-02, 4.33315858e-02,\n", |
| 452 |
" 0.00000000e+00, 1.82445552e-02, 3.88606004e-02,\n", |
| 453 |
" 0.00000000e+00, 9.95126814e-02, 8.68491977e-02],\n", |
| 454 |
" [ 1.20896704e-01, 4.24718186e-02, 3.63281672e-03,\n", |
| 455 |
" 8.90641093e-01, 2.25664433e-02, 4.28506017e-01,\n", |
| 456 |
" 1.07771484e-02, 3.10042445e-02, 3.72267328e-02,\n", |
| 457 |
" 7.50589883e-03, 6.06563725e-02, 0.00000000e+00],\n", |
| 458 |
" [ 1.61590222e-02, 0.00000000e+00, 2.05814978e-03,\n", |
| 459 |
" 5.34187198e-01, 5.10552106e-03, 8.44328046e-01,\n", |
| 460 |
" 2.61573717e-02, 0.00000000e+00, 0.00000000e+00,\n", |
| 461 |
" 5.78178652e-03, 2.39303317e-02, 1.31362742e-02],\n", |
| 462 |
" [ 0.00000000e+00, 2.69280677e-03, 9.71267349e-04,\n", |
| 463 |
" 3.30787838e-01, 6.21950626e-03, 9.42233860e-01,\n", |
| 464 |
" 2.94584837e-02, 0.00000000e+00, 0.00000000e+00,\n", |
| 465 |
" 5.73373958e-03, 4.27455790e-02, 0.00000000e+00],\n", |
| 466 |
" [ 2.47827265e-02, 4.29235697e-02, 0.00000000e+00,\n", |
| 467 |
" 1.78738698e-01, 6.27625175e-03, 9.80933607e-01,\n", |
| 468 |
" 2.33737398e-02, 0.00000000e+00, 0.00000000e+00,\n", |
| 469 |
" 7.23603554e-03, 5.22218607e-02, 0.00000000e+00],\n", |
| 470 |
" [ 5.14810756e-02, 8.37553069e-02, 0.00000000e+00,\n", |
| 471 |
" 8.09028000e-02, 8.36077239e-03, 9.89670217e-01,\n", |
| 472 |
" 1.91887841e-02, 0.00000000e+00, 0.00000000e+00,\n", |
| 473 |
" 7.49138417e-03, 6.20334558e-02, 0.00000000e+00],\n", |
| 474 |
" [ 3.32304335e-05, 8.98099914e-02, 7.88206533e-02,\n", |
| 475 |
" 6.78931251e-02, 1.03781298e-02, 9.46214318e-01,\n", |
| 476 |
" 1.99007969e-02, 2.77829915e-01, 0.00000000e+00,\n", |
| 477 |
" 5.27050020e-03, 8.98295045e-02, 1.37303912e-04],\n", |
| 478 |
" [ 4.44915704e-02, 1.76926292e-02, 8.55403841e-02,\n", |
| 479 |
" 3.43058892e-02, 1.02791144e-02, 6.12779975e-01,\n", |
| 480 |
" 1.08479457e-02, 7.82902062e-01, 2.35577766e-02,\n", |
| 481 |
" 0.00000000e+00, 0.00000000e+00, 4.15841700e-04],\n", |
| 482 |
" [ 8.49420503e-02, 1.20950106e-03, 1.09671965e-01,\n", |
| 483 |
" 1.21202255e-02, 9.66064818e-03, 3.11395019e-01,\n", |
| 484 |
" 1.18757458e-02, 9.39238966e-01, 3.51763181e-02,\n", |
| 485 |
" 0.00000000e+00, 0.00000000e+00, 4.83506039e-04],\n", |
| 486 |
" [ 9.73264277e-02, 8.18367931e-04, 1.63448021e-01,\n", |
| 487 |
" 3.29328179e-02, 0.00000000e+00, 1.07415609e-01,\n", |
| 488 |
" 1.59726646e-02, 9.74627972e-01, 3.21203955e-02,\n", |
| 489 |
" 0.00000000e+00, 0.00000000e+00, 1.54338439e-03],\n", |
| 490 |
" [ 1.01416081e-01, 1.04169745e-03, 1.80728585e-01,\n", |
| 491 |
" 6.06901608e-02, 0.00000000e+00, 6.61161765e-02,\n", |
| 492 |
" 2.47565862e-02, 9.73594368e-01, 2.22180095e-02,\n", |
| 493 |
" 0.00000000e+00, 0.00000000e+00, 1.90866250e-03],\n", |
| 494 |
" [ 1.10513300e-01, 1.16068078e-03, 1.73819974e-01,\n", |
| 495 |
" 1.02042183e-01, 0.00000000e+00, 2.92203538e-02,\n", |
| 496 |
" 2.34891493e-02, 9.72198844e-01, 1.90163590e-02,\n", |
| 497 |
" 1.48798684e-02, 0.00000000e+00, 4.90254431e-04],\n", |
| 498 |
" [ 3.55626754e-02, 1.81426816e-02, 4.17623669e-03,\n", |
| 499 |
" 2.48134360e-01, 6.25082850e-02, 0.00000000e+00,\n", |
| 500 |
" 1.42965894e-02, 7.92297721e-01, 5.51682472e-01,\n", |
| 501 |
" 2.48422362e-02, 0.00000000e+00, 0.00000000e+00],\n", |
| 502 |
" [ 5.95077313e-03, 5.97716793e-02, 3.42533062e-03,\n", |
| 503 |
" 2.44145960e-01, 6.32876679e-02, 0.00000000e+00,\n", |
| 504 |
" 5.36255576e-02, 2.65350431e-01, 9.26052511e-01,\n", |
| 505 |
" 4.36775088e-02, 0.00000000e+00, 0.00000000e+00],\n", |
| 506 |
" [ 0.00000000e+00, 9.64460447e-02, 4.26063733e-03,\n", |
| 507 |
" 2.43948489e-01, 1.03570789e-01, 0.00000000e+00,\n", |
| 508 |
" 5.81621416e-02, 8.93462449e-02, 9.52694476e-01,\n", |
| 509 |
" 3.80766392e-02, 0.00000000e+00, 0.00000000e+00],\n", |
| 510 |
" [ 0.00000000e+00, 1.12178452e-01, 3.88786523e-03,\n", |
| 511 |
" 2.46121064e-01, 1.31447822e-01, 0.00000000e+00,\n", |
| 512 |
" 5.56226075e-02, 4.11828123e-02, 9.50674653e-01,\n", |
| 513 |
" 3.12177017e-02, 0.00000000e+00, 0.00000000e+00],\n", |
| 514 |
" [ 0.00000000e+00, 1.28379911e-01, 4.15798556e-03,\n", |
| 515 |
" 2.42848203e-01, 1.54101804e-01, 0.00000000e+00,\n", |
| 516 |
" 5.40408976e-02, 2.66808923e-02, 9.47005808e-01,\n", |
| 517 |
" 1.80636365e-02, 0.00000000e+00, 0.00000000e+00],\n", |
| 518 |
" [ 2.53859581e-03, 1.91127565e-02, 2.02243519e-03,\n", |
| 519 |
" 1.12405896e-01, 2.00758949e-02, 1.71211705e-01,\n", |
| 520 |
" 1.11278214e-01, 2.78214198e-02, 8.43058825e-01,\n", |
| 521 |
" 3.59242298e-02, 4.81743693e-01, 0.00000000e+00],\n", |
| 522 |
" [ 3.64924222e-03, 4.81747527e-04, 1.33294973e-03,\n", |
| 523 |
" 1.66589431e-02, 8.12750682e-02, 5.23332097e-02,\n", |
| 524 |
" 1.93933602e-02, 7.19394675e-03, 4.53242511e-01,\n", |
| 525 |
" 2.10740436e-02, 8.83748949e-01, 5.52243181e-02],\n", |
| 526 |
" [ 3.93253341e-02, 1.05347857e-02, 5.73152967e-04,\n", |
| 527 |
" 9.43983346e-02, 1.47001455e-02, 9.49144140e-02,\n", |
| 528 |
" 1.09301947e-01, 0.00000000e+00, 1.52132437e-01,\n", |
| 529 |
" 3.77451628e-02, 9.71437275e-01, 0.00000000e+00],\n", |
| 530 |
" [ 5.13472892e-02, 3.31028481e-03, 3.92163085e-04,\n", |
| 531 |
" 1.16105102e-01, 1.48322433e-02, 1.23555176e-01,\n", |
| 532 |
" 1.31526113e-01, 0.00000000e+00, 6.29846603e-02,\n", |
| 533 |
" 3.36713530e-02, 9.72449303e-01, 1.81256123e-02],\n", |
| 534 |
" [ 4.89316843e-02, 0.00000000e+00, 2.96047510e-04,\n", |
| 535 |
" 1.21519662e-01, 1.54880993e-02, 1.36466905e-01,\n", |
| 536 |
" 1.60353199e-01, 0.00000000e+00, 5.08025885e-02,\n", |
| 537 |
" 3.07972487e-02, 9.66688573e-01, 1.56879909e-02],\n", |
| 538 |
" [ 1.98805124e-01, 0.00000000e+00, 5.65947848e-04,\n", |
| 539 |
" 1.64412722e-01, 1.19373361e-02, 4.63520400e-02,\n", |
| 540 |
" 1.70583233e-01, 4.07661591e-03, 4.17407714e-02,\n", |
| 541 |
" 8.87882337e-02, 9.44411933e-01, 2.23336406e-02],\n", |
| 542 |
" [ 6.47660613e-01, 1.09090796e-02, 1.12898223e-01,\n", |
| 543 |
" 3.67569685e-01, 2.99616763e-03, 6.21701628e-02,\n", |
| 544 |
" 1.54504344e-01, 4.67437543e-02, 1.10933237e-01,\n", |
| 545 |
" 7.35431835e-02, 6.20417416e-01, 0.00000000e+00],\n", |
| 546 |
" [ 8.65435839e-01, 1.29717980e-02, 1.31817192e-01,\n", |
| 547 |
" 4.10883784e-01, 2.92400294e-03, 3.68153527e-02,\n", |
| 548 |
" 1.44890219e-01, 4.59817015e-02, 6.56576604e-02,\n", |
| 549 |
" 7.75377080e-02, 1.72791421e-01, 0.00000000e+00],\n", |
| 550 |
" [ 8.88323963e-01, 6.67962246e-03, 1.39935657e-01,\n", |
| 551 |
" 4.00489062e-01, 4.18465305e-03, 2.89279912e-02,\n", |
| 552 |
" 1.33017227e-01, 3.70216556e-02, 4.46693525e-02,\n", |
| 553 |
" 9.21769366e-02, 2.12603044e-02, 0.00000000e+00],\n", |
| 554 |
" [ 9.02807653e-01, 2.10433849e-04, 1.41207963e-01,\n", |
| 555 |
" 3.53729963e-01, 3.70743079e-03, 2.84912884e-02,\n", |
| 556 |
" 1.24700509e-01, 3.85590978e-02, 7.32384622e-02,\n", |
| 557 |
" 1.29023761e-01, 0.00000000e+00, 0.00000000e+00],\n", |
| 558 |
" [ 9.03710425e-01, 7.44168065e-04, 1.43547818e-01,\n", |
| 559 |
" 3.72946173e-01, 2.09493260e-03, 0.00000000e+00,\n", |
| 560 |
" 8.42518359e-02, 3.97068299e-02, 2.67485473e-02,\n", |
| 561 |
" 1.19236089e-01, 0.00000000e+00, 0.00000000e+00],\n", |
| 562 |
" [ 6.47389829e-01, 9.62956285e-04, 6.64771914e-01,\n", |
| 563 |
" 2.39137770e-03, 4.67590243e-02, 3.20941269e-01,\n", |
| 564 |
" 0.00000000e+00, 4.35641073e-02, 7.85760283e-02,\n", |
| 565 |
" 8.59863684e-03, 0.00000000e+00, 1.60069749e-01],\n", |
| 566 |
" [ 3.28709453e-01, 1.69940933e-03, 8.70308340e-01,\n", |
| 567 |
" 4.05057939e-03, 1.12228319e-01, 3.07389736e-01,\n", |
| 568 |
" 0.00000000e+00, 9.21809580e-03, 4.08464968e-02,\n", |
| 569 |
" 2.30031163e-02, 7.12021589e-02, 1.41627774e-01],\n", |
| 570 |
" [ 5.96007854e-02, 4.15985473e-04, 9.20822144e-01,\n", |
| 571 |
" 4.98715928e-03, 1.42810509e-01, 2.99190402e-01,\n", |
| 572 |
" 0.00000000e+00, 2.82169972e-03, 9.67504457e-02,\n", |
| 573 |
" 2.13448256e-02, 6.86787590e-02, 1.55108452e-01],\n", |
| 574 |
" [ 1.00565166e-03, 4.87675949e-04, 9.16018307e-01,\n", |
| 575 |
" 4.97340504e-03, 1.85770854e-01, 3.13747793e-01,\n", |
| 576 |
" 9.54985619e-04, 5.11525373e-04, 9.01459679e-02,\n", |
| 577 |
" 1.34017821e-02, 4.05925550e-02, 1.34093463e-01],\n", |
| 578 |
" [ 0.00000000e+00, 0.00000000e+00, 9.05534029e-01,\n", |
| 579 |
" 5.09170908e-03, 1.82564959e-01, 3.44701439e-01,\n", |
| 580 |
" 8.97256099e-03, 2.26825313e-03, 1.00266904e-01,\n", |
| 581 |
" 1.87462401e-02, 2.89424695e-02, 1.28471598e-01],\n", |
| 582 |
" [ 2.77297765e-01, 6.03793422e-03, 8.73157084e-01,\n", |
| 583 |
" 1.08850099e-01, 1.63998276e-01, 1.86085209e-01,\n", |
| 584 |
" 1.12378806e-01, 3.68778035e-03, 1.07245870e-01,\n", |
| 585 |
" 3.08599137e-02, 2.12714337e-02, 2.48486981e-01],\n", |
| 586 |
" [ 1.69244394e-01, 4.37403657e-02, 3.03970158e-01,\n", |
| 587 |
" 8.75151396e-01, 7.77170435e-03, 2.06875071e-01,\n", |
| 588 |
" 2.50958979e-01, 0.00000000e+00, 8.39736313e-03,\n", |
| 589 |
" 7.22063184e-02, 8.75576749e-04, 5.66990860e-03],\n", |
| 590 |
" [ 1.40741199e-01, 2.77895834e-02, 1.73567683e-02,\n", |
| 591 |
" 9.07734573e-01, 7.42863258e-03, 2.24477857e-01,\n", |
| 592 |
" 3.04127991e-01, 5.42868767e-03, 5.90751180e-03,\n", |
| 593 |
" 1.04962833e-01, 1.62259694e-02, 2.91900840e-02],\n", |
| 594 |
" [ 1.27348587e-01, 1.07598929e-02, 1.18423183e-03,\n", |
| 595 |
" 8.94889891e-01, 7.23825488e-03, 2.36309126e-01,\n", |
| 596 |
" 3.41708869e-01, 1.28864795e-02, 0.00000000e+00,\n", |
| 597 |
" 9.47448835e-02, 9.87823866e-03, 3.06219663e-02],\n", |
| 598 |
" [ 1.17775850e-01, 0.00000000e+00, 1.24028174e-03,\n", |
| 599 |
" 8.85621428e-01, 7.06017762e-03, 2.27440313e-01,\n", |
| 600 |
" 3.75161767e-01, 1.33218868e-02, 0.00000000e+00,\n", |
| 601 |
" 8.89340267e-02, 1.81909241e-02, 2.93070376e-02],\n", |
| 602 |
" [ 1.02504231e-01, 0.00000000e+00, 1.17313946e-02,\n", |
| 603 |
" 8.52970004e-01, 7.52911018e-03, 2.57936388e-01,\n", |
| 604 |
" 4.22498077e-01, 1.49978139e-02, 0.00000000e+00,\n", |
| 605 |
" 1.20507725e-01, 2.86296960e-02, 3.37380432e-02],\n", |
| 606 |
" [ 2.23521233e-01, 6.97063208e-02, 2.91122291e-02,\n", |
| 607 |
" 8.11486423e-01, 1.22398529e-02, 1.76643550e-01,\n", |
| 608 |
" 4.93218750e-01, 7.14359526e-03, 0.00000000e+00,\n", |
| 609 |
" 8.32359493e-02, 2.67229248e-02, 5.92517145e-02],\n", |
| 610 |
" [ 2.90636867e-01, 0.00000000e+00, 4.96018380e-02,\n", |
| 611 |
" 8.07283044e-01, 1.48371840e-02, 9.19546261e-02,\n", |
| 612 |
" 4.98431951e-01, 3.59821995e-03, 1.67102162e-02,\n", |
| 613 |
" 0.00000000e+00, 3.46249305e-02, 5.25626317e-02]], dtype=float32))}" |
| 614 |
] |
| 615 |
}, |
| 616 |
"execution_count": 8, |
| 617 |
"metadata": {},
|
| 618 |
"output_type": "execute_result" |
| 619 |
} |
| 620 |
], |
| 621 |
"source": [ |
| 622 |
"out" |
| 623 |
] |
| 624 |
}, |
| 625 |
{
|
| 626 |
"cell_type": "markdown", |
| 627 |
"metadata": {},
|
| 628 |
"source": [ |
| 629 |
"### Plotting the results\n", |
| 630 |
"\n", |
| 631 |
"The `matrix` dictionary element contains a tuple of step time (the time in seconds from one chroma feature to the next), and the chroma features themselves as a 2d NumPy array." |
| 632 |
] |
| 633 |
}, |
| 634 |
{
|
| 635 |
"cell_type": "code", |
| 636 |
"execution_count": 9, |
| 637 |
"metadata": {
|
| 638 |
"collapsed": false |
| 639 |
}, |
| 640 |
"outputs": [], |
| 641 |
"source": [ |
| 642 |
"step, chroma = out[\"matrix\"]" |
| 643 |
] |
| 644 |
}, |
| 645 |
{
|
| 646 |
"cell_type": "code", |
| 647 |
"execution_count": 10, |
| 648 |
"metadata": {
|
| 649 |
"collapsed": false |
| 650 |
}, |
| 651 |
"outputs": [ |
| 652 |
{
|
| 653 |
"data": {
|
| 654 |
"text/plain": [ |
| 655 |
" 0.092879819" |
| 656 |
] |
| 657 |
}, |
| 658 |
"execution_count": 10, |
| 659 |
"metadata": {},
|
| 660 |
"output_type": "execute_result" |
| 661 |
} |
| 662 |
], |
| 663 |
"source": [ |
| 664 |
"step" |
| 665 |
] |
| 666 |
}, |
| 667 |
{
|
| 668 |
"cell_type": "markdown", |
| 669 |
"metadata": {},
|
| 670 |
"source": [ |
| 671 |
"As an aside, we may find it useful later to have the step time in samples rather than seconds. Multiplying by the sample rate gets this, with some rounding error, but the module also contains a dedicated function to get the result exactly." |
| 672 |
] |
| 673 |
}, |
| 674 |
{
|
| 675 |
"cell_type": "code", |
| 676 |
"execution_count": 11, |
| 677 |
"metadata": {
|
| 678 |
"collapsed": false |
| 679 |
}, |
| 680 |
"outputs": [ |
| 681 |
{
|
| 682 |
"data": {
|
| 683 |
"text/plain": [ |
| 684 |
"2048.00000895" |
| 685 |
] |
| 686 |
}, |
| 687 |
"execution_count": 11, |
| 688 |
"metadata": {},
|
| 689 |
"output_type": "execute_result" |
| 690 |
} |
| 691 |
], |
| 692 |
"source": [ |
| 693 |
"float(step) * rate" |
| 694 |
] |
| 695 |
}, |
| 696 |
{
|
| 697 |
"cell_type": "code", |
| 698 |
"execution_count": 12, |
| 699 |
"metadata": {
|
| 700 |
"collapsed": false |
| 701 |
}, |
| 702 |
"outputs": [ |
| 703 |
{
|
| 704 |
"data": {
|
| 705 |
"text/plain": [ |
| 706 |
"2048" |
| 707 |
] |
| 708 |
}, |
| 709 |
"execution_count": 12, |
| 710 |
"metadata": {},
|
| 711 |
"output_type": "execute_result" |
| 712 |
} |
| 713 |
], |
| 714 |
"source": [ |
| 715 |
"vamp.vampyhost.RealTime.to_frame(step, rate)" |
| 716 |
] |
| 717 |
}, |
| 718 |
{
|
| 719 |
"cell_type": "markdown", |
| 720 |
"metadata": {},
|
| 721 |
"source": [ |
| 722 |
"Show the chroma plot." |
| 723 |
] |
| 724 |
}, |
| 725 |
{
|
| 726 |
"cell_type": "code", |
| 727 |
"execution_count": 13, |
| 728 |
"metadata": {
|
| 729 |
"collapsed": false |
| 730 |
}, |
| 731 |
"outputs": [ |
| 732 |
{
|
| 733 |
"data": {
|
| 734 |
"text/plain": [ |
| 735 |
"<matplotlib.image.AxesImage at 0x7f2d89c3af90>" |
| 736 |
] |
| 737 |
}, |
| 738 |
"execution_count": 13, |
| 739 |
"metadata": {},
|
| 740 |
"output_type": "execute_result" |
| 741 |
}, |
| 742 |
{
|
| 743 |
"data": {
|
| 744 |
"image/png": "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\nokz+bzEmWmKCk7xKBGS8daOittcuuNqdWcICHdw3nQPB9bhwoSXtZ/XFwbHyvW58Qc6xi8LyeeTy\npO5tjrCfEeXCbXgT4XV63j18tqCVHKpwn2cV1CJdUOp6L837WsOgXzDorxn0Z/R6l9RZjzrrU296\n1FkPywBDH8sAu9343+3RYbeLV5pJTNcQbyLiLCJGoyNNPbDUfagPoer1KE3qdMwklCZtZ+wVOGQ3\nQd2dxCtvVW12gXC+4z3b6b+uX64h3nMl2Yd43/VdSyQoKyVtQFtFzsJssU01rNcut7nsuSDlNmhe\n7ehH+b2ufgl44ixw2f9GW4gsqldBr/J1jXsYhEEpt0TcBvdt0T5TUG0NNJT/NWVRykIZYzcRdlNh\n12tnxW7b3jiKIwTuiMYRkyBZqGrgsqSCkuYlg3xJvzxnUD4hri6x1rqCxdp2C2yvkSa8IExV06Xe\nC4q02+ETxbr+nE39xbYHL18HfnhD8LbW/i3gb7mLVH8W+Le6wA3wTe4j07xbOvN9hDaRDVZtYA1Z\nX49iGPdglMKoB8V+j81hn/XBgM1hn0U0YV73mJs95vUexabXDgKsjFsGXhaurrq84Wu2zktFpnKf\nWxD121l08ui9XYsCw72UWkZId9l/dw+XkLuVUGx38Iezx65MkxAUjB9kMS7lz6dIiSVgcROdkskv\ntODDPGtx9yXyIFGH0KIKLLJWjGCHC74lJVxgNI7h6PAFd2494/atJ5wcPmfzIiE7S9icpWR5Qm1T\nalJqehhSLAXWu/n22kPmalIUQ6UZKs0ITdSLyG+lZO8kZLcTNod95lWPeTVkVh1Qlnsu2CQPu5jj\n+BRZ8VhK+9jOfXZpj66n1DXNupNriLSxy7IYj10ZjSHy3O7W2gupJE9J+R3vtj8RqohSMPUZTaXE\nEuSaZKaS/hJLnh36RPA9f5rYu7t9gzquUMcl6rhCH1bEqnIbNamKSDnq1K3IcLBem4jKRNRWU5nI\ng6D1mz5ZWFnMqcU8t5jnbuFe46Gugf51dQsTw8Is222XDXDPE3BlUJXcrhbctufciR4z5AW1gdpY\nahOs61aB9irv3Aho+zkTv4Zty7FLWq18mXe3zfdrP+a15Ktmm4S3f03e53Nk4ya37qxh9W1QQB4B\n5bJmj2I46sPRCI5HsL4zZnZ/wuz+HrP7lrNkxIuqh60OWFe3KaZDeKrgmW8UVUPm+bk63BtQrNg/\n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\n", |
| 745 |
"text/plain": [ |
| 746 |
"<matplotlib.figure.Figure at 0x7f2d89e9d410>" |
| 747 |
] |
| 748 |
}, |
| 749 |
"metadata": {},
|
| 750 |
"output_type": "display_data" |
| 751 |
} |
| 752 |
], |
| 753 |
"source": [ |
| 754 |
"plt.imshow(chroma.transpose(), origin=\"lower\")" |
| 755 |
] |
| 756 |
}, |
| 757 |
{
|
| 758 |
"cell_type": "markdown", |
| 759 |
"metadata": {},
|
| 760 |
"source": [ |
| 761 |
"### How did we know which parameters were available?\n", |
| 762 |
"A bit further back, we set up some plugin parameters in a Python dictionary:" |
| 763 |
] |
| 764 |
}, |
| 765 |
{
|
| 766 |
"cell_type": "code", |
| 767 |
"execution_count": 14, |
| 768 |
"metadata": {
|
| 769 |
"collapsed": true |
| 770 |
}, |
| 771 |
"outputs": [], |
| 772 |
"source": [ |
| 773 |
"plugin_params = { \"tuningmode\": 1, \"s\": 0.9, \"chromanormalize\": 3 }"
|
| 774 |
] |
| 775 |
}, |
| 776 |
{
|
| 777 |
"cell_type": "markdown", |
| 778 |
"metadata": {},
|
| 779 |
"source": [ |
| 780 |
"We also included `output = chroma` in the `vamp.collect` call to make sure we got the right output from the plugin. How did we know which parameters and outputs were available?\n", |
| 781 |
"\n", |
| 782 |
"Outputs are pretty simple, there's a `vamp.get_outputs_of` call that returns them directly." |
| 783 |
] |
| 784 |
}, |
| 785 |
{
|
| 786 |
"cell_type": "code", |
| 787 |
"execution_count": 15, |
| 788 |
"metadata": {
|
| 789 |
"collapsed": false |
| 790 |
}, |
| 791 |
"outputs": [ |
| 792 |
{
|
| 793 |
"data": {
|
| 794 |
"text/plain": [ |
| 795 |
"['logfreqspec',\n", |
| 796 |
" 'tunedlogfreqspec',\n", |
| 797 |
" 'semitonespectrum',\n", |
| 798 |
" 'chroma',\n", |
| 799 |
" 'basschroma',\n", |
| 800 |
" 'bothchroma']" |
| 801 |
] |
| 802 |
}, |
| 803 |
"execution_count": 15, |
| 804 |
"metadata": {},
|
| 805 |
"output_type": "execute_result" |
| 806 |
} |
| 807 |
], |
| 808 |
"source": [ |
| 809 |
"vamp.get_outputs_of(\"nnls-chroma:nnls-chroma\")" |
| 810 |
] |
| 811 |
}, |
| 812 |
{
|
| 813 |
"cell_type": "markdown", |
| 814 |
"metadata": {},
|
| 815 |
"source": [ |
| 816 |
"Querying details of a plugin's parameters is a bit more tricky with the current version of the module. You have to use a lower-level interface for this. It looks like the following." |
| 817 |
] |
| 818 |
}, |
| 819 |
{
|
| 820 |
"cell_type": "code", |
| 821 |
"execution_count": 16, |
| 822 |
"metadata": {
|
| 823 |
"collapsed": false |
| 824 |
}, |
| 825 |
"outputs": [ |
| 826 |
{
|
| 827 |
"data": {
|
| 828 |
"text/plain": [ |
| 829 |
"[{'defaultValue': 1.0,\n",
|
| 830 |
" 'description': 'Toggles approximate transcription (NNLS).',\n", |
| 831 |
" 'identifier': 'useNNLS',\n", |
| 832 |
" 'isQuantized': True,\n", |
| 833 |
" 'maxValue': 1.0,\n", |
| 834 |
" 'minValue': 0.0,\n", |
| 835 |
" 'name': 'use approximate transcription (NNLS)',\n", |
| 836 |
" 'quantizeStep': 1.0,\n", |
| 837 |
" 'unit': ''},\n", |
| 838 |
" {'defaultValue': 0.0,\n",
|
| 839 |
" 'description': 'Consider the cumulative energy spectrum (from low to high frequencies). All bins below the first bin whose cumulative energy exceeds the quantile [bass noise threshold] x [total energy] will be set to 0. A threshold value of 0 means that no bins will be changed.',\n", |
| 840 |
" 'identifier': 'rollon',\n", |
| 841 |
" 'isQuantized': True,\n", |
| 842 |
" 'maxValue': 5.0,\n", |
| 843 |
" 'minValue': 0.0,\n", |
| 844 |
" 'name': 'bass noise threshold',\n", |
| 845 |
" 'quantizeStep': 0.5,\n", |
| 846 |
" 'unit': '%'},\n", |
| 847 |
" {'defaultValue': 0.0,\n",
|
| 848 |
" 'description': 'Tuning can be performed locally or on the whole extraction segment. Local tuning is only advisable when the tuning is likely to change over the audio, for example in podcasts, or in a cappella singing.',\n", |
| 849 |
" 'identifier': 'tuningmode',\n", |
| 850 |
" 'isQuantized': True,\n", |
| 851 |
" 'maxValue': 1.0,\n", |
| 852 |
" 'minValue': 0.0,\n", |
| 853 |
" 'name': 'tuning mode',\n", |
| 854 |
" 'quantizeStep': 1.0,\n", |
| 855 |
" 'unit': '',\n", |
| 856 |
" 'valueNames': ['global tuning', 'local tuning']},\n", |
| 857 |
" {'defaultValue': 1.0,\n",
|
| 858 |
" 'description': 'Spectral whitening: no whitening - 0; whitening - 1.',\n", |
| 859 |
" 'identifier': 'whitening',\n", |
| 860 |
" 'isQuantized': False,\n", |
| 861 |
" 'maxValue': 1.0,\n", |
| 862 |
" 'minValue': 0.0,\n", |
| 863 |
" 'name': 'spectral whitening',\n", |
| 864 |
" 'unit': ''},\n", |
| 865 |
" {'defaultValue': 0.699999988079071,\n",
|
| 866 |
" 'description': 'Determines how individual notes in the note dictionary look: higher values mean more dominant higher harmonics.',\n", |
| 867 |
" 'identifier': 's',\n", |
| 868 |
" 'isQuantized': False,\n", |
| 869 |
" 'maxValue': 0.8999999761581421,\n", |
| 870 |
" 'minValue': 0.5,\n", |
| 871 |
" 'name': 'spectral shape',\n", |
| 872 |
" 'unit': ''},\n", |
| 873 |
" {'defaultValue': 0.0,\n",
|
| 874 |
" 'description': 'How shall the chroma vector be normalized?',\n", |
| 875 |
" 'identifier': 'chromanormalize',\n", |
| 876 |
" 'isQuantized': True,\n", |
| 877 |
" 'maxValue': 3.0,\n", |
| 878 |
" 'minValue': 0.0,\n", |
| 879 |
" 'name': 'chroma normalization',\n", |
| 880 |
" 'quantizeStep': 1.0,\n", |
| 881 |
" 'unit': '',\n", |
| 882 |
" 'valueNames': ['none', 'maximum norm', 'L1 norm', 'L2 norm']}]" |
| 883 |
] |
| 884 |
}, |
| 885 |
"execution_count": 16, |
| 886 |
"metadata": {},
|
| 887 |
"output_type": "execute_result" |
| 888 |
} |
| 889 |
], |
| 890 |
"source": [ |
| 891 |
"plug = vamp.vampyhost.load_plugin(\"nnls-chroma:nnls-chroma\", 44100, vamp.vampyhost.ADAPT_NONE)\n", |
| 892 |
"plug.parameters" |
| 893 |
] |
| 894 |
}, |
| 895 |
{
|
| 896 |
"cell_type": "markdown", |
| 897 |
"metadata": {},
|
| 898 |
"source": [ |
| 899 |
"From this we can work out that (for example) to set the chroma vector normalisation to \"L2 norm\" we should supply something like `parameters = { \"chromanormalize\" : 3 }` in the call to `vamp.collect`.\n",
|
| 900 |
"\n", |
| 901 |
"(Strictly speaking we're supposed to call" |
| 902 |
] |
| 903 |
}, |
| 904 |
{
|
| 905 |
"cell_type": "code", |
| 906 |
"execution_count": 17, |
| 907 |
"metadata": {
|
| 908 |
"collapsed": false |
| 909 |
}, |
| 910 |
"outputs": [ |
| 911 |
{
|
| 912 |
"data": {
|
| 913 |
"text/plain": [ |
| 914 |
"True" |
| 915 |
] |
| 916 |
}, |
| 917 |
"execution_count": 17, |
| 918 |
"metadata": {},
|
| 919 |
"output_type": "execute_result" |
| 920 |
} |
| 921 |
], |
| 922 |
"source": [ |
| 923 |
"plug.unload()" |
| 924 |
] |
| 925 |
}, |
| 926 |
{
|
| 927 |
"cell_type": "markdown", |
| 928 |
"metadata": {},
|
| 929 |
"source": [ |
| 930 |
"after doing the above, as well; otherwise a bit of memory is wasted.)" |
| 931 |
] |
| 932 |
}, |
| 933 |
{
|
| 934 |
"cell_type": "markdown", |
| 935 |
"metadata": {},
|
| 936 |
"source": [ |
| 937 |
"### Exporting the result to a CSV file\n", |
| 938 |
"This is a pretty standard use of Python's `csv` module." |
| 939 |
] |
| 940 |
}, |
| 941 |
{
|
| 942 |
"cell_type": "code", |
| 943 |
"execution_count": 18, |
| 944 |
"metadata": {
|
| 945 |
"collapsed": true |
| 946 |
}, |
| 947 |
"outputs": [], |
| 948 |
"source": [ |
| 949 |
"import csv\n", |
| 950 |
"out_file = open('features.csv', 'w')\n",
|
| 951 |
"writer = csv.writer(out_file)\n", |
| 952 |
"writer.writerows(chroma)\n", |
| 953 |
"out_file.close()" |
| 954 |
] |
| 955 |
}, |
| 956 |
{
|
| 957 |
"cell_type": "markdown", |
| 958 |
"metadata": {},
|
| 959 |
"source": [ |
| 960 |
"(Might be a good moment to find the `features.csv` file in the filesystem and check that it looks OK.)" |
| 961 |
] |
| 962 |
}, |
| 963 |
{
|
| 964 |
"cell_type": "markdown", |
| 965 |
"metadata": {},
|
| 966 |
"source": [ |
| 967 |
"### Processing many files\n", |
| 968 |
"We define a function that exports chroma features, with the parameters used above, from an audio file given the filename. Then we can call that for a set of files. The body of the function is basically just the same code we already showed, to extract and then save the chroma features.\n", |
| 969 |
"\n", |
| 970 |
"This time we are overriding the `sr` parameter of `librosa.load` to tell it to always use the file's own sample rate (that's what `sr = None` does). We're also printing out the filename, its sample rate, and the resulting step size in audio samples between chroma features." |
| 971 |
] |
| 972 |
}, |
| 973 |
{
|
| 974 |
"cell_type": "code", |
| 975 |
"execution_count": 19, |
| 976 |
"metadata": {
|
| 977 |
"collapsed": true |
| 978 |
}, |
| 979 |
"outputs": [], |
| 980 |
"source": [ |
| 981 |
"import os, glob\n", |
| 982 |
"def extract_chroma(audiofile):\n", |
| 983 |
" data, rate = librosa.load(audiofile, sr = None)\n", |
| 984 |
" out = vamp.collect(data, rate,\n", |
| 985 |
" plugin_key = \"nnls-chroma:nnls-chroma\",\n", |
| 986 |
" output = \"chroma\",\n", |
| 987 |
" process_timestamp_method = vamp.vampyhost.SHIFT_DATA)\n", |
| 988 |
" step, chroma = out[\"matrix\"]\n", |
| 989 |
" print(\"File \" + audiofile +\n", |
| 990 |
" \": sample rate = \" + str(rate) +\n", |
| 991 |
" \", chroma step = \" + str(vamp.vampyhost.RealTime.to_frame(step, rate)))\n", |
| 992 |
" out_file = open(os.path.splitext(audiofile)[0] + \"_chroma.csv\", \"w\")\n", |
| 993 |
" csv.writer(out_file).writerows(chroma)\n", |
| 994 |
" out_file.close()" |
| 995 |
] |
| 996 |
}, |
| 997 |
{
|
| 998 |
"cell_type": "code", |
| 999 |
"execution_count": 20, |
| 1000 |
"metadata": {
|
| 1001 |
"collapsed": false |
| 1002 |
}, |
| 1003 |
"outputs": [ |
| 1004 |
{
|
| 1005 |
"name": "stdout", |
| 1006 |
"output_type": "stream", |
| 1007 |
"text": [ |
| 1008 |
"File data/piano-scale.wav: sample rate = 44100, chroma step = 2048\n" |
| 1009 |
] |
| 1010 |
} |
| 1011 |
], |
| 1012 |
"source": [ |
| 1013 |
"for file in glob.glob(\"/home/dm/data/*.wav\"):\n", |
| 1014 |
" extract_chroma(file)" |
| 1015 |
] |
| 1016 |
}, |
| 1017 |
{
|
| 1018 |
"cell_type": "markdown", |
| 1019 |
"metadata": {},
|
| 1020 |
"source": [ |
| 1021 |
"### Further exercises\n", |
| 1022 |
"\n", |
| 1023 |
"* Load the audio data and chroma .csv file generated in the last step into Sonic Visualiser, and verify that the chroma data are similar to those generated by running the plugin within Sonic Visualiser.\n", |
| 1024 |
"* Compare the results generated by two or more different chromagram plugins, or using different sets of parameters.\n", |
| 1025 |
"* Adapt this notebook so as to extract \"smoothed pitch curve\" features using the pYIN plugin, and figure out how to display the results using in a Matplotlib plot." |
| 1026 |
] |
| 1027 |
} |
| 1028 |
], |
| 1029 |
"metadata": {
|
| 1030 |
"kernelspec": {
|
| 1031 |
"display_name": "Python 2", |
| 1032 |
"language": "python", |
| 1033 |
"name": "python2" |
| 1034 |
}, |
| 1035 |
"language_info": {
|
| 1036 |
"codemirror_mode": {
|
| 1037 |
"name": "ipython", |
| 1038 |
"version": 2 |
| 1039 |
}, |
| 1040 |
"file_extension": ".py", |
| 1041 |
"mimetype": "text/x-python", |
| 1042 |
"name": "python", |
| 1043 |
"nbconvert_exporter": "python", |
| 1044 |
"pygments_lexer": "ipython2", |
| 1045 |
"version": "2.7.10" |
| 1046 |
} |
| 1047 |
}, |
| 1048 |
"nbformat": 4, |
| 1049 |
"nbformat_minor": 0 |
| 1050 |
} |