As follow up to my previous question I was wondering if there are any speech detection libraries in existence. By speech detection I mean passing in an audio buffer and getting back an index of where speech starts and stops. So if I have 10 seconds of audio sampling at 44kHz, I would expect an array of numbers such as:


This would indicate for example that speech starts one second in and then finishes at the two second point, etc.

What I'm not looking for is speech recognition which writes out text from spoken word. This unfortunately is what I see a lot of when I google 'speech detection'.

It would be great if the library was in C, C++ or even Objective-C as I'm writing an app for the iPhone.



In my answer to your that question, I had mentioned that Voice Activity Detection is a standard feature for codecs like G.729 and such others.

You should look for reference encoders and decoders for algorithms that applies this.

One such example is - http://www.voiceage.com/openinit_g729.php

Another possible source is Speex codec. Which implements VAD

BTW: You should google "Voice Activity Detection" or "Talk Spurt" rather than "Speech Detection".


There are open source implementations in the Sphinx and Freeswitch projects. I think they are all energy based detectors do won't need any kind model.

Sphinx 4 (Java but it should be easy to port to C/C++)



Answer taken from Stackoverflow question.


Voice Activity Detection using Adaptive Threshold is very easy and handy to implement on any platform

Here you can have a algorithm which is Adaptive Energy based

Small addition to above algorithm when you are calculating for very first time go for taking Mean of Energy and mark as Emin

in this the frame you pass is divided in to sub-frames and further you can examine each sub-frame for its activity

you can overcome further problems with overlapped frames

  • $\begingroup$ I'm trying to implement the method in the paper but get lost when the Min_E is zero due to noise suppression. In that case, the Thresh_E would be -INF from the equation. Even taking log1p(Min_E), the Thresh_E would be zero such that it is very easy to misclassify voiced frames because of non-zero energy. Any good suggestions or am I misunderstand it? Equations: Thresh _ E Energy _ Pr imThresh*log(Min _ E) $\endgroup$
    – Farley
    Nov 29 '15 at 0:29

How about LibVAD?

Seems like that does exactly what you're describing.

Disclosure: I'm the developer behind LibVAD

  • $\begingroup$ How does one get libVAD? $\endgroup$
    – todd
    Mar 31 '16 at 14:18
  • $\begingroup$ By purchasing it. The website doesn't disclose a price until after you fill in a form, though. $\endgroup$ Oct 7 '16 at 21:33
  • 2
    $\begingroup$ Link now goes to a malware site wanting visitors to update flash. $\endgroup$ Sep 11 '18 at 20:09

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.