qm-dsp
1.8
|
This class takes an input audio signal and a sequence of beat locations (calculated e.g. More...
#include <DownBeat.h>
Public Member Functions | |
DownBeat (float originalSampleRate, size_t decimationFactor, size_t dfIncrement) | |
Construct a downbeat locator that will operate on audio at the downsampled by the given decimation factor from the given original sample rate, plus beats extracted from the same audio at the given original sample rate with the given frame increment. More... | |
~DownBeat () | |
void | setBeatsPerBar (int bpb) |
void | findDownBeats (const float *audio, size_t audioLength, const vector< double > &beats, vector< int > &downbeats) |
Estimate which beats are down-beats. More... | |
void | getBeatSD (vector< double > &beatsd) const |
Return the beat spectral difference function. More... | |
void | pushAudioBlock (const float *audio) |
For your downsampling convenience: call this function repeatedly with input audio blocks containing dfIncrement samples at the original sample rate, to decimate them to the downsampled rate and buffer them within the DownBeat class. More... | |
const float * | getBufferedAudio (size_t &length) const |
Retrieve the accumulated audio produced by pushAudioBlock calls. More... | |
void | resetAudioBuffer () |
Clear any buffered downsampled audio data. More... | |
Private Types | |
typedef vector< int > | i_vec_t |
typedef vector< vector< int > > | i_mat_t |
typedef vector< double > | d_vec_t |
typedef vector< vector< double > > | d_mat_t |
Private Member Functions | |
void | makeDecimators () |
double | measureSpecDiff (d_vec_t oldspec, d_vec_t newspec) |
Private Attributes | |
int | m_bpb |
float | m_rate |
size_t | m_factor |
size_t | m_increment |
Decimator * | m_decimator1 |
Decimator * | m_decimator2 |
float * | m_buffer |
float * | m_decbuf |
size_t | m_bufsiz |
size_t | m_buffill |
size_t | m_beatframesize |
double * | m_beatframe |
FFTReal * | m_fft |
double * | m_fftRealOut |
double * | m_fftImagOut |
d_vec_t | m_beatsd |
This class takes an input audio signal and a sequence of beat locations (calculated e.g.
by TempoTrackV2) and estimates which of the beat locations are downbeats (first beat of the bar).
The input audio signal is expected to have been downsampled to a very low sampling rate (e.g. 2700Hz). A utility function for downsampling and buffering incoming block-by-block audio is provided.
Definition at line 38 of file DownBeat.h.
|
private |
Definition at line 110 of file DownBeat.h.
|
private |
Definition at line 111 of file DownBeat.h.
|
private |
Definition at line 112 of file DownBeat.h.
|
private |
Definition at line 113 of file DownBeat.h.
DownBeat::DownBeat | ( | float | originalSampleRate, |
size_t | decimationFactor, | ||
size_t | dfIncrement | ||
) |
Construct a downbeat locator that will operate on audio at the downsampled by the given decimation factor from the given original sample rate, plus beats extracted from the same audio at the given original sample rate with the given frame increment.
decimationFactor must be a power of two no greater than 64, and dfIncrement must be a multiple of decimationFactor.
Definition at line 26 of file DownBeat.cpp.
References m_beatframe, m_beatframesize, m_fft, m_fftImagOut, m_fftRealOut, m_rate, and MathUtilities::nextPowerOfTwo().
DownBeat::~DownBeat | ( | ) |
Definition at line 57 of file DownBeat.cpp.
References m_beatframe, m_buffer, m_decbuf, m_decimator1, m_decimator2, m_fft, m_fftImagOut, and m_fftRealOut.
void DownBeat::setBeatsPerBar | ( | int | bpb | ) |
Definition at line 70 of file DownBeat.cpp.
References m_bpb.
void DownBeat::findDownBeats | ( | const float * | audio, |
size_t | audioLength, | ||
const vector< double > & | beats, | ||
vector< int > & | downbeats | ||
) |
Estimate which beats are down-beats.
audio contains the input audio stream after downsampling, and audioLength contains the number of samples in this downsampled stream.
beats contains a series of beat positions expressed in multiples of the df increment at the audio's original sample rate, as described to the constructor.
The returned downbeat array contains a series of indices to the beats array.
Definition at line 146 of file DownBeat.cpp.
References MathUtilities::adaptiveThreshold(), FFTReal::forward(), MathUtilities::getMax(), m_beatframe, m_beatframesize, m_beatsd, m_bpb, m_factor, m_fft, m_fftImagOut, m_fftRealOut, m_increment, measureSpecDiff(), and TWO_PI.
void DownBeat::getBeatSD | ( | vector< double > & | beatsd | ) | const |
Return the beat spectral difference function.
This is calculated during findDownBeats, so this function can only be meaningfully called after that has completed. The returned vector contains one value for each of the beat times passed in to findDownBeats, less one. Each value contains the spectral difference between region prior to the beat's nominal position and the region following it.
Definition at line 307 of file DownBeat.cpp.
References m_beatsd.
void DownBeat::pushAudioBlock | ( | const float * | audio | ) |
For your downsampling convenience: call this function repeatedly with input audio blocks containing dfIncrement samples at the original sample rate, to decimate them to the downsampled rate and buffer them within the DownBeat class.
Call getBufferedAudio() to retrieve the results after all blocks have been processed.
Definition at line 94 of file DownBeat.cpp.
References m_buffer, m_buffill, m_bufsiz, m_decbuf, m_decimator1, m_decimator2, m_factor, m_increment, makeDecimators(), and Decimator::process().
const float * DownBeat::getBufferedAudio | ( | size_t & | length | ) | const |
Retrieve the accumulated audio produced by pushAudioBlock calls.
Definition at line 130 of file DownBeat.cpp.
void DownBeat::resetAudioBuffer | ( | ) |
Clear any buffered downsampled audio data.
Definition at line 137 of file DownBeat.cpp.
|
private |
Definition at line 76 of file DownBeat.cpp.
References Decimator::getHighestSupportedFactor(), m_decbuf, m_decimator1, m_decimator2, m_factor, and m_increment.
Referenced by pushAudioBlock().
|
private |
Definition at line 118 of file DownBeat.h.
Referenced by findDownBeats(), and setBeatsPerBar().
|
private |
Definition at line 119 of file DownBeat.h.
Referenced by DownBeat().
|
private |
Definition at line 120 of file DownBeat.h.
Referenced by findDownBeats(), makeDecimators(), and pushAudioBlock().
|
private |
Definition at line 121 of file DownBeat.h.
Referenced by findDownBeats(), makeDecimators(), and pushAudioBlock().
|
private |
Definition at line 122 of file DownBeat.h.
Referenced by makeDecimators(), pushAudioBlock(), and ~DownBeat().
|
private |
Definition at line 123 of file DownBeat.h.
Referenced by makeDecimators(), pushAudioBlock(), and ~DownBeat().
|
private |
Definition at line 124 of file DownBeat.h.
Referenced by getBufferedAudio(), pushAudioBlock(), resetAudioBuffer(), and ~DownBeat().
|
private |
Definition at line 125 of file DownBeat.h.
Referenced by makeDecimators(), pushAudioBlock(), and ~DownBeat().
|
private |
Definition at line 126 of file DownBeat.h.
Referenced by pushAudioBlock(), and resetAudioBuffer().
|
private |
Definition at line 127 of file DownBeat.h.
Referenced by getBufferedAudio(), pushAudioBlock(), and resetAudioBuffer().
|
private |
Definition at line 128 of file DownBeat.h.
Referenced by DownBeat(), and findDownBeats().
|
private |
Definition at line 129 of file DownBeat.h.
Referenced by DownBeat(), findDownBeats(), and ~DownBeat().
|
private |
Definition at line 130 of file DownBeat.h.
Referenced by DownBeat(), findDownBeats(), and ~DownBeat().
|
private |
Definition at line 131 of file DownBeat.h.
Referenced by DownBeat(), findDownBeats(), and ~DownBeat().
|
private |
Definition at line 132 of file DownBeat.h.
Referenced by DownBeat(), findDownBeats(), and ~DownBeat().
|
private |
Definition at line 133 of file DownBeat.h.
Referenced by findDownBeats(), and getBeatSD().