Sound recognition in Android

Elephant picture Elephant · Dec 15, 2011 · Viewed 31.1k times · Source

I want my Android app to recognize sound. For example I want to know if the sound from microphone is a clapping or knocking or something else.

Do I need to use math, or can I just use some library for that?

If there are any libraries for sound analysis please let me know. Thanks.

Answer

Andrei Buneyeu picture Andrei Buneyeu · Sep 16, 2014

Musicg library is useful for whistle detection. Concerning claps, I wouldn't recommend use it, cause it reacts to every loud sound (even speech).

For clap and other percussive sounds detection I recommend TarsosDSP. It has a simple API with a rich functionality (pitch detection and so on). For clap detection you can use something like (if you use TarsosDSPAndroid-v3):

MicrophoneAudioDispatcher mDispatcher = new MicrophoneAudioDispatcher((int) SAMPLE_RATE, BUFFER_SIZE, BUFFER_OVERLAP);
double threshold = 8;
double sensitivity = 20;
mPercussionDetector = new PercussionOnsetDetector(22050, 1024, 
        new OnsetHandler() {

            @Override
            public void handleOnset(double time, double salience) {
                Log.d(TAG, "Clap detected!");
            }
        }, sensitivity, threshold);
mDispatcher.addAudioProcessor(mPercussionDetector);
new Thread(mDispatcher).start();

You can tune your detector by adjusting sensitivity (0-100) and threshold (0-20).

Good luck!