https://github.com/adamstark/Gist
A C++ Library for Audio Analysis
https://github.com/adamstark/Gist
audio audio-analysis c-plus-plus fft gist mfcc mir music music-information-retrieval onset-detection pitch-tracking spectral-analysis
Last synced: 3 months ago
JSON representation
A C++ Library for Audio Analysis
- Host: GitHub
- URL: https://github.com/adamstark/Gist
- Owner: adamstark
- License: gpl-3.0
- Created: 2014-06-22T09:27:59.000Z (almost 11 years ago)
- Default Branch: master
- Last Pushed: 2021-09-18T01:26:17.000Z (over 3 years ago)
- Last Synced: 2024-05-16T12:57:33.958Z (about 1 year ago)
- Topics: audio, audio-analysis, c-plus-plus, fft, gist, mfcc, mir, music, music-information-retrieval, onset-detection, pitch-tracking, spectral-analysis
- Language: C++
- Homepage: http://www.adamstark.co.uk/project/gist/
- Size: 938 KB
- Stars: 359
- Watchers: 26
- Forks: 74
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
Gist - An Audio Analysis Library
==================================

Gist is a C++ based audio analysis library
Author
------Gist is written and maintained by Adam Stark.
[http://www.adamstark.co.uk](http://www.adamstark.co.uk)
Usage
-----Firstly, import the Gist header file:
#include "Gist.h"
##### InstantiationGist is a template class, so instantiate it with floating point precision:
int frameSize = 512;
int sampleRate = 44100;Gist gist (frameSize, sampleRate);
Or with double precision:Gist gist (frameSize, sampleRate);
We proceed with the documentation as if we were using floating point precision.
##### Process Audio Frames
Once you have an audio frame, pass it to the Gist object. You can do this either as a STL vector:
std::vector audioFrame;
// !
// fill audio frame with samples here
// !
gist.processAudioFrame (audioFrame);
Or, as an array:float audioFrame[512];
// !
// fill audio frame with samples here
// !
gist.processAudioFrame (audioFrame, 512);
Now we can retrieve some audio features.
##### Core Time Domain Features
// Root Mean Square (RMS)
float rms = gist.rootMeanSquare();
// Peak Energy
float peakEnergy = gist.peakEnergy();
// Zero Crossing rate
float zcr = gist.zeroCrossingRate();
##### Core Frequency Domain Features
// Spectral Centroid
float specCent = gist.spectralCentroid();
// Spectral Crest
float specCrest = gist.spectralCrest();
// Spectral Flatness
float specFlat = gist.spectralFlatness();
// Spectral Rolloff
float specRolloff = gist.spectralRolloff();
// Spectral Kurtosis
float specKurtosis = gist.spectralKurtosis();##### Onset Detection Functions
// Energy difference
float ed = gist.energyDifference();
// Spectral difference
float sd = gist.spectralDifference();
// Spectral difference (half-wave rectified)
float sd_hwr = gist.spectralDifferenceHWR();
// Complex Spectral Difference
float csd = gist.complexSpectralDifference();
// High Frequency Content
float hfc = gist.highFrequencyContent();
##### FFT Magnitude Spectrum// FFT Magnitude Spectrum
const std::vector& magSpec = gist.getMagnitudeSpectrum();
##### Pitch// Pitch Estimation
float pitch = gist.pitch();##### Mel-frequency Representations
// Mel-frequency Spectrum
const std::vector& melSpec = gist.getMelFrequencySpectrum();
// MFCCs
const std::vector& mfcc = gist.getMelFrequencyCepstralCoefficients();
Version History
---------------=== 1.0.7 === (18th September 2021)
* Automated builds on all major platforms
=== 1.0.6 === (21st October 2020)
* CMake support
* Python module moved to Python 3=== 1.0.5 === (29th February 2020)
* Fix for compilation error on Windows
* Fixed lots of warnings
* Update to code style=== 1.0.4 === (22nd January 2017)
* Small changes to the interface for MFCCs and Mel Spectrum
* Many internal improvements
* Added window functions=== 1.0.3 === (17th June 2016)
* Added a Python module
* Added ability to set and get sampling frequency
* Bug fixes and implementation improvements=== 1.0.2 === (24th April 2016)
* Added the option of using Apple Accelerate FFT
* Added two new features: Spectral Rolloff and Spectral Kurtosis
* Small usability and code style tweaks=== 1.0.1 === (26th June 2014)
* Added the option of using Kiss FFT instead of FFTW
=== 1.0.0 === (22nd June 2014)
* The first version of Gist
Dependencies
------------The Gist library depends on one of the following FFT libraries:
* [FFTW](http://fftw.org)
You will need to install this yourself, link projects using -lfftw3 and use the flag -DUSE_FFTW
* [Kiss FFT](http://kissfft.sourceforge.net/) - included with project
This is included with the project. To use Kiss FFT, add the flag -DUSE_KISS_FFT
* [Apple Accelerate FFT](https://developer.apple.com/library/ios/documentation/Performance/Conceptual/vDSP_Programming_Guide/UsingFourierTransforms/UsingFourierTransforms.html)
To use Accelerate FFT, add the flag -DUSE_ACCELERATE_FFT
License
-------Copyright (c) 2014 Adam Stark
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.You should have received a copy of the GNU General Public License
along with this program. If not, see .