# How to emulate human sound recognition

A person can recognise a large variety of sounds and fairly subtle differences in sound, even if they have only heard the sound once. Is it possible to recreate this with software, and how?

Consider these two problems:
(1) You have a recording of a dog bark and a cat meow (same volume). You then record another bark, how would you go about comparing the sounds in order to tell them apart?
(2) A person says "Yay" and "Tray". Similar, but we can all tell the difference.

I have already investigated the following:
(1) Fingerprinting: Does not work unless the sounds you are comparing are identical. So it does not work if a different dog barks. --- Dejavu Python Package and its GitHub repo
(2) Generic Voice recognition: Very inaccurate if the recorded word does not come with context. Also, dogs and cat's don't speak English. --- Python Speech recognition package, CMU speech recognition
(3) Phonetics/ phonemes: The breakup of a (speech) sound into constituent pieces. E.g: "word" becomes w ə r d. It returns rubbish if a sound is just taken out of context. --- Python pocketsphinx library and example code

## 1 Answer

I do not think that there is a standard approach to this problem, because as far as I know it has not yet been solved satisfactorily. I believe that you can find a solution to a (very) simplified version of the problem by restricting it for example to the recognition of a fixed set of animal sounds. The way to go would probably be to use methods from speech recognition (Hidden Markov Models, HMM), because the problem is similar to voice control systems, where commands from a fixed set of predefined commands are identified. With some good engineering, these systems can work relatively well.

In the case of animal sounds you would need to define a fixed set of animal sounds that you want to be able to recognize, collect a large database of such sounds, and use the data to train HMM models, which can then be used to score unknown sounds. Of course, such a system does not even come close to human capability of distinguishing sounds, but for such a restricted application it may work well enough.

So in that sense I do not agree that voice control systems are "very inaccurate" if there is no context available, because that's the usual scenario for simple voice control systems, which can in fact be made to work in practice.

• I've changed the question to "generic voice recognition" (in contrast to trained voice recognition). I believe all voice control systems are trained, or at least have a very small vocabulary. I think that is the way to go. – Roman Jun 11 '15 at 13:30
• @Roman: You're right, they are all trained. But don't forget that we humans are also trained with a lot of training data. – Matt L. Jun 11 '15 at 13:58
• Good Point. Also, is there a specific library that you know of which makes training a specialised set easy? And has an explicit instruction set on how to do it? I am a bit out of my depth here. – Roman Jun 15 '15 at 7:53
• @Roman: Just google speech recognition software. I know of Sphinx, but I've never used it. – Matt L. Jun 15 '15 at 9:16