Recognition of sound patterns [closed]

2

I would like to know if there are any Android / Java APIs for sound pattern recognition.

Example: Birds singing, the sound is given as input, and the application would return to which bird this sound belongs.

The application will be used for something similar to the example.

    
asked by anonymous 13.08.2016 / 08:03

3 answers

3

Come on, satisfying results can be obtained without using ANN / RNAs, compare amplitude (mentioned in an answer here) will never work the way proposed, the question is very broad, I can not simply write an article here with all the steps, although it seems complicated if you have a good mathematical / algebraic base and in signal processing you will see that it is not that complicated, it can be laborious but not very complex , so being familiar with these fields is more than essential, as well as a solid basis in deterministic and stochastic processes.

Maybe I'll start talking the steps here and you do not understand bolhufas , so it's up to you to go deeper, the steps are:

Extract the characteristics of each bird (audio from each corner), this can be done by extracting the MFCC - Honey Frequency Cepstral Coefficients

The MFCC extracts the envelope / formants (contour) of the frequencies of a signal in the frequency domain, this consistently tells us the shape of the vocal tract in the envelope of the spectrum, we will have the frequency bands equally spaced on the scale honey, which approximates the response of the human auditory system more narrowly than the linearly spaced frequency bands used in the normal cepstrum, in general 12 coefficients are sufficient, roughly a spectrum filter bank:

Atthispointyouwillhavea12-positionvectorrepresentingthecharacteristicsofthecornerforeachbirdyouwant,Idonotwanttogodeep,butfromnowallyouhavetodoiscompareyourpre-recordedvectorwithanewoneunknown)andtoratewhichofthemhasthebestsimilarity,youcanstartwithsimplercomparisonssuchas Euclidiana or try something else but developed for example Dynamic Time Warping

    
15.08.2016 / 06:02
1

Dude, I would recommend using AudioInputStream . Using it, you can pick up the amplitude of the wave and thus find a pattern in the incoming sound and compare, that pattern, with the patterns you already have in the application, the singing of a bird as you spoke, for example.

I recommend some readings:

Example using AudioInputStream

link

Java Doc

link

    
13.08.2016 / 21:32
1
A good way of doing but requiring a little prior familiarization with the concept of Artificial Neural Networks would be to extract from the sound a vector (or two separate vectors) containing the predominant frequencies and amplitudes of that stretch and use that vector as input to a RNA that was previously fed with known bird recordings. More accurately with the frequency and amplitude data of these recordings.

I believe that it is a simple and appropriate case for the application of RNAs because they are simple sounds, without mixing of frequencies. Of course, it will work better when the passages under test are individual sounds, that is, a single bird singing at a time.

I'm talking about RNAs but I do not understand much about them. I know only the Percéptron type, and I think it's a case for them.

I do not indicate the most appropriate libraries for this because I do not know them, but nothing that a googlada by ANN (Artificial Neural Networks) and Java does not solve. And nowadays the way things are there maybe even some free service that offers RNAs for you to train and use.

I also leave it to you to decide whether to perform this processing on the side of the Android device or a remote server.

    
15.08.2016 / 00:27