I am working on a project, for which I am finding the onset times of an audio and then extracting the MFCC coefficients for all the times.

Thus if I have n onset times, I would have n feature vectors, corresponding to the MFCC coefficients at those points.

Now I want to characterize a "bol" of the tabla by the the waveform in between the start of one onset and the start of the next onset. This would essentially mean that for one onset time, I would have to take the MFCCs feature vectors at multiple points, and I would have a matrix of onset values for each onset point, instead of just a single vector at each point. Also, the matrix wouldnot always be of the same size, since the gap between 2 onsets might not always be the same.

How do I combine these multiple MFCC vectors to one, or how to I use this matrix for machine learning?

  • $\begingroup$ "bol" , "tabla" - I'm sorry but I have no idea what you meant there. $\endgroup$
    – MSalters
    Oct 24, 2014 at 13:04

1 Answer 1


If I understand the problem well, you have a segment of audio between two onsets, for example between an onset at t=2.0s and an onset at t=2.8s, and your MFCC function returns many MFCC vectors - corresponding to small analysis windows between these two instants (In our example, 80 vectors if your MFCC function is set for a rate of 100 analysis frames per second).

But you want a single vector "summarizing" the MFCC for the entire region between the two onsets.

Option 1:

Increase the window size / decrease the frame rate of your MFCC routine so that it yields fewer vectors.

Option 2:

Build a feature vector with the mean and standard deviation of all the MFCC vectors collected within your time segment.

In both cases, set an upper bound on the size of the segment analyzed by such a process - I'd say at most 200ms. For example, if you have an onset at t=5.0s and the next onset is at t=7.0s, the percussive event is likely to be located within the first couple of hundred ms (say between t=5.0s and t=5.5s) - the rest being silence or background noise.

  • $\begingroup$ Should I simply take the mean of all the vectors? $\endgroup$ Oct 24, 2014 at 13:21
  • $\begingroup$ Also, I am having a trouble here - I downloaded some annotated tabla bols from paragchordia.com/data.html But now when I try to find the onsets with mirpeaks using MITToolbox, I get lesser number of onsets. That is, all the onsets are not getting recognized correctly. Hence it is becoming a trouble to automatically annotate the bols. What should I do? $\endgroup$ Oct 24, 2014 at 13:26
  • $\begingroup$ Check if there are parameters of the onset detection algorithm that you can tweak (such as detection thresholds). Or try another detection method. $\endgroup$ Oct 24, 2014 at 14:44
  • $\begingroup$ Hey, when I am training my classifier, I get a 46% accuracy with 6 class labels(bols). But now when I am testing it on a new test file using MFCC coefficients, I get all the test files classified into a single class. What might be going wrong? :( $\endgroup$ Oct 25, 2014 at 15:08

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.