forked from jrosener/libKeyFinder
-
Notifications
You must be signed in to change notification settings - Fork 0
zwellnes/libKeyFinder
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
libKeyFinder can be used to estimate the musical key of digital recordings. It is the basis of the KeyFinder GUI app, which is available as a binary download for Mac OSX and Windows at www.ibrahimshaath.co.uk/keyfinder For the most basic use case, do something like this: // Static because it retains useful resources for repeat use static KeyFinder::KeyFinder k; // Build an empty audio object KeyFinder::AudioData a; // Prepare the object for your audio stream a.setFrameRate(yourAudioStream.framerate); a.setChannels(yourAudioStream.channels); a.addToSampleCount(yourAudioStream.length); // Copy your audio into the object while (int i = 0; i < yourAudioStream.length; i++) { a.setSample(i, yourAudioStream[i]); } // Run the analysis KeyFinder::KeyDetectionResult r = k.keyOfAudio(a); // And do something with the result! doSomethingWith(r.globalKeyEstimate); Alternatively, you can transform a stream of audio into a chromatic representation, and make progressive estimates of the key: KeyFinder::AudioData a; a.setFrameRate(yourAudioStream.framerate); a.setChannels(yourAudioStream.channels); a.addToSampleCount(yourAudioStream.packetLength); static KeyFinder::KeyFinder k; // the workspace holds the memory allocations for analysis of a single track KeyFinder::Workspace w; while (yourPacket = newAudioPacket()) { while (int i = 0; i < newAudioPacket.length; i++) { a.setSample(i, newAudioPacket[i]); } k.progressiveChromagram(a, w); // if you want to grab progressive key estimates... KeyFinder::KeyDetectionResult r = k.keyOfChromagram(w); doSomethingWithMostRecentKeyEstimate(r.globalKeyEstimate); } // if you want to squeeze every last bit of audio from the working buffer... k.finalChromagram(w) // and finally... KeyFinder::KeyDetectionResult r = k.keyOfChromagram(w); doSomethingWithFinalKeyEstimate(r.globalKeyEstimate); ***************************************************************************** ** BUILD process (using Qmake and QtCreator) ***************************************************************************** [Ubuntu 15.04 / Debian 8] 1. sudo apt-get install build-esential qt5-default 2. sudo apt-get install libboost-all-dev 3. sudo apt-get install libfftw3-dev 4. qmake LibKeyFinder.pro 5. make 6. sudo make install [Windows VC++ 10.0 - 32bits] 1. Install Qt Creator 2. Install Windows SDK for Windows 7.1 (provides VS2010 compiler, aka Visual C++ 10.0) 3. Extract vs2010-external_libs\boost_x_xx_x.zip 4. In QtCreator load project LibKeyFinder.pro 5. Select the compiler kit: "Microsoft Windows SDK for Windows 7 (7.1.x) (x86)" 6. On project >> Run qmake 7. On project >> Build
About
Musical key detection for digital audio, GPL v3
Resources
Stars
Watchers
Forks
Packages 0
No packages published
Languages
- C++ 86.0%
- C 7.7%
- Shell 3.2%
- QMake 2.8%
- Makefile 0.3%