In an audio file I would like to find calls of a specific bird specie, one that makes wobbling sound with rising notes. Can you recommend what would be the best audio feature to calculate in time or frequency domain to capture its essence?

Among others I tried MFCC, but the results were not promising (or perhaps my implementation poor) .


In this post I explained briefly the problem and included exemplary audio file with spectrogram: Example.

Here is another example. All marked areas contain kiwi (famous flightless bird from New Zealand) calls I am trying to identify. Mark that the original audio is very noisy; presented spectrogram is a result of applying high-pass filter and spectral subtraction on areas identified as noise-only.

enter image description here

  • 1
    $\begingroup$ Just a quick thought: Try Chirplet Transform. I can't give you a full answer because I didn't work with it. Also check Fractional Fourier Transform. Hope it helps. $\endgroup$
    – visoft
    Feb 11 '14 at 8:42
  • $\begingroup$ Thanks! I never heard of the two you mentioned so I will be happy to try them out. If any interesting results shall come out of this I will post results here. $\endgroup$ Feb 11 '14 at 10:52
  • $\begingroup$ If you include a spectrogram of the bird call in your question it might help people to come up with more creative answers for you. $\endgroup$
    – Paul R
    Feb 11 '14 at 11:29
  • $\begingroup$ Good point - additional information included. If more data is needed I will be most happy to provide it. $\endgroup$ Feb 11 '14 at 13:15

I would start with following set of parameters:

  • MFCC's (I that know you tried it, but stay with me) without static energy (1'st coefficient)
  • Some descriptors from MPEG-7, like: Spectral Flatness, Harmonicity, Fundamental frequency, Spectral Spread, etc. You can find out more about them here: click or in this great book: MPEG-7 Audio and Beyond

You should also include $\Delta$'s and $\Delta\Delta$'s of MFCC's and Spectral Flatness. They should really improve accuracy. You can also try to calculate these for other parameters. Having that, you can start with Gaussian Mixture Model or Support Vector Machine (I think that GMM will be suitable for that task). After training your model simply validate it on testing set (seems obvious but I've seen many projects where people tested their Machine Learning algorithms on training set with added noise or, what's even worse, same training data).

After this, you should perform Feature Optimisation. This is important part, as some of the features are irrelevant (i.e. Spectral Flatness for few first filter banks, while bird's chirp has higher frequencies). Nice publications with many algorithms for that purpose can be found here: click, click. Good luck!

  • $\begingroup$ Thanks for the suggestions and all the reading material! As you may see from my answer I came to quite similar approach. Kiwi calls are of inharmonic nature, so I guess Harmonicity and Fundamental frequency might not do well (although I am just a beginner in the field, so please correct me if I am wrong). What's the meaning of $\Delta$ in your post? I would guess first derivative, but in my dictionary it was usually Laplace operator. For sure I will try again with 1st coefficient of MFCC. $\endgroup$ Mar 14 '14 at 14:30
  • $\begingroup$ You are welcome. Shortly speaking $\Delta$'s are the derivative's of MFCC's over time, and $\Delta\Delta$'s an acceleration. This allows you to capture some causality of coefficients - I think that fits for purpose in your case. More about that can be found in: click, click. Regarding Harmonicity and Fundamental Frequency - well, you never know, because Harmonicity might be discriminative and Fundamental Frequency also some particular distribution in your N-dimensional space. $\endgroup$
    – jojek
    Mar 14 '14 at 14:42

I tried using chirplet transform (from MPTK library) proposed in one of the comments by visoft - with limited success I am afraid. Not that it was not working at all, but I have found much better approach.

Since the procedure is quite lengthy, those who are interested I invite to reading third chapter of a small write-up in PDF I created. In comparison to chirplets it is not only roughly 20x faster, but also more flexible, accurate and stable. It proved to be more successful in kiwi recognition than people who initially labelled the supplied data, which I did not think is possible. Here is a list of features I used:

  • perceptual spread
  • perceptual sharpness
  • spectral flatness
  • spectral roll-off
  • spectral decrease
  • spectral shape statistics
  • spectral slope
  • Linear Predictive Coding (LPC) coefficients
  • Line Spectral Pairs (LSP) coefficients
  • Octave Band Signal Intensity (OBSI) coefficients

The idea in essence is quite similar to what jojek was proposing, so +1 and my thanks!

Implementation details can be found on Github's project page. Hopefully it can assist other people in similar endeavours. Any comments, suggestions and questions are much welcomed both here and on the project's page.


I suppose you still want to isolate single calls that could be identified by that rising pattern. You'd have to find the peaks for that. Maybe you first identify and isolate the ,,pulses'', then find the frequency maximum of each and then have your program cut where there's a large downward step.

  • $\begingroup$ Single calls have been already isolated - vertical lines with number on top of the spectrogram mark beginning and end of each call. Identifying specific frequency is of not much use since they differ from bird to bird with same specie and besides have regional variations. What is common to them is the wobbling sound with rising notes (up-chirp). $\endgroup$ Feb 11 '14 at 20:36
  • $\begingroup$ Ah I didn't see you want to tell this kind of call from others. $\endgroup$
    – user7358
    Feb 11 '14 at 21:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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