Music Recognition and Signal Processing
audio, audio-processing, php, python, signal-processing
Solution
I worked on the periphery of a cool framework that implements several Music Information Retrieval techniques. I'm hardly an expert (edit: actually i'm nowhere close to an expert, just to clarify), but I can tell that that the Fast Fourier Transform is used all over the place with this stuff. Fourier analysis is wacky but its application is pretty straight-forward. Basically you can get a lot of information about audio when you analyze it in the frequency domain rather than the time domain. This is what Fourier analysis gives you.
That may be a bit off topic from what you want to do. In any case, there are some cool tools in the project to play with, as well as viewing the sourcecode for the core library itself: http://marsyas.sness.net
Problem
I want to build something similar to Tunatic or Midomi (try them out if you're not sure what they do) and I'm wondering what algorithms I'd have to use; The idea I have about the workings of such applications is something like this: - have a big database with several songs - for each song in 1. reduce quality / bit-rate (to 64kbps for instance) and calculate the sound "hash" - have the sound / excerpt of the music you want to identify - for the song in 3. reduce quality / bit-rate (again to 64kbps) and calculate sound "hash" - if 4. sound hash is in any of the 2. sound hashes return the matched music I though of reducing the quality / bit-rate due to the environment noises and encoding differences. Am I in the right track here? Can anyone provide me any specific documentation or examples? Midori seems to even recognize `hum's`, that's pretty awesomely impressive! How do they do that? Do sound hashes exist or is it something I just made up? If they do, how can I calculate them? And more importantly, how can I check if `child-hash` is in `father-hash`? How would I go about building a similar system with Python (maybe a built-in module) or PHP? Some examples (preferably in Python or PHP) will be greatly appreciated. Thanks in advance!