This code is meant to be a stripped down version of the capabilities that power the Shazam app.
There are three primary parts to this code:
- Database Tool
···Move and do things with data
- Audio Processing
···Manipulate and create features from audio files.
- Matching
···Match audio snippet to correct song in database (this is the key functionality)
Importantly, this portion of the code is not a database in and of itself, but rather it should hook into an actual database either on the local machine where the code is being run, or to a database on a server somewhere. This module should have the following functionality:
- List all current songs in DB.
- Add songs to DB - note that each audio file that is added should include other song information as well.
- Remove songs from DB.
- Generate song features - this functionality will be a wrapper around an audio processing object (see below).
- Change song audio formats.
- Search capability.
Features of songs will be generated by this portion of the code. More specifically:
- Apply a window function to an audio file.
- Compute local periodograms from windowed signal.
- Smooth periodograms.
The flagship functionality of this app, this module will accept a song snippet, call the audio processing module to generate features, and then call the database object to search against current library.