Ardour
9.0-pre0-582-g084a23a80d
|
#include <DownBeat.h>
Public Member Functions | |
DownBeat (float originalSampleRate, size_t decimationFactor, size_t dfIncrement) | |
~DownBeat () | |
void | setBeatsPerBar (int bpb) |
void | findDownBeats (const float *audio, size_t audioLength, const vector< double > &beats, vector< int > &downbeats) |
void | getBeatSD (vector< double > &beatsd) const |
void | pushAudioBlock (const float *audio) |
const float * | getBufferedAudio (size_t &length) const |
void | resetAudioBuffer () |
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 113 of file DownBeat.h.
|
private |
Definition at line 112 of file DownBeat.h.
|
private |
Definition at line 111 of file DownBeat.h.
|
private |
Definition at line 110 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.
DownBeat::~DownBeat | ( | ) |
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.
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.
const float* DownBeat::getBufferedAudio | ( | size_t & | length | ) | const |
Retrieve the accumulated audio produced by pushAudioBlock calls.
|
private |
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.
void DownBeat::resetAudioBuffer | ( | ) |
Clear any buffered downsampled audio data.
void DownBeat::setBeatsPerBar | ( | int | bpb | ) |
|
private |
Definition at line 129 of file DownBeat.h.
|
private |
Definition at line 128 of file DownBeat.h.
|
private |
Definition at line 133 of file DownBeat.h.
|
private |
Definition at line 118 of file DownBeat.h.
|
private |
Definition at line 124 of file DownBeat.h.
|
private |
Definition at line 127 of file DownBeat.h.
|
private |
Definition at line 126 of file DownBeat.h.
|
private |
Definition at line 125 of file DownBeat.h.
|
private |
Definition at line 122 of file DownBeat.h.
|
private |
Definition at line 123 of file DownBeat.h.
|
private |
Definition at line 120 of file DownBeat.h.
|
private |
Definition at line 130 of file DownBeat.h.
|
private |
Definition at line 132 of file DownBeat.h.
|
private |
Definition at line 131 of file DownBeat.h.
|
private |
Definition at line 121 of file DownBeat.h.
|
private |
Definition at line 119 of file DownBeat.h.