bands.audioIn(input, bufferSize, nChannels);
// compute onset class
- attackClass.audioIn(); //, onset, bands);
+ attackClass.audioIn(input, bufferSize, nChannels);
}
void audioOut(){
bandPlot.draw();
// onset class
- ofRect(250 + 190 + currentOnsetClass * 7, 150, 20, 20);
+ ofSetColor(200, 100, 100);
+ ofRect(250 + 190 + currentOnsetClass * 7, 180, 10, 30);
// beat class
- ofRect(190 + currentBeatClass * 7, 150, 20, 20);
+ ofSetColor(100, 200, 100);
+ ofRect(190 + currentBeatClass * 7, 170, 10, 30);
}
*/
+#include <math.h>
+#define LIN2DB(v) (20.0*log10f(v))
+
#include "ofxAubioAttackClass.h"
#include "ofLog.h"
void ofxAubioAttackClass::setup(string method, int buf_s, int hop_s, int samplerate)
{
//setup("default", 512, 256, 44100);
+ hop_size = hop_s;
+ buf_size = buf_s;
}
void ofxAubioAttackClass::setBands(ofxAubioMelBands & _bands) {
ofAddListener(beat->gotBeat, this, &ofxAubioAttackClass::beatEvent);
}
-void ofxAubioAttackClass::audioIn()
+void ofxAubioAttackClass::audioIn(float * input, int bufferSize, int nChannels)
{
+ uint_t i;
+ for (i = 0; i < bufferSize; i++) {
+ // run aubio block when appropriate
+ curpos += 1;
+ if (curpos == hop_size)
+ {
+ blockAudioIn();
+ curpos = 0;
+ }
+ }
+}
+
+void ofxAubioAttackClass::blockAudioIn() {
energies.push_back(bands->energies);
if (energies.size() > max(lag_onset, lag_beat)) {
energies.erase (energies.begin());
void ofxAubioAttackClass::onsetClassify() {
if (energies.size() >= lag_onset) {
int max_band = 0;
- float max_energy = 0;
+ float max_energy = -1000;
for (int i = min_band_onset; i < bands->nBands; i ++) {
float band_sum = 0;
for (int j = 0; j < lag_onset; j ++) {
- band_sum += energies[energies.size() - j - 1][i];
+ band_sum += LIN2DB(energies[energies.size() - j - 1][i]);
}
if (max_energy < band_sum) {
max_energy = band_sum;
void ofxAubioAttackClass::beatClassify() {
if (energies.size() >= lag_beat) {
int max_band = 0;
- float max_energy = 0;
+ float max_energy = -1000;
for (int i = min_band_beat; i < bands->nBands; i ++) {
float band_sum = 0;
for (int j = 0; j < lag_beat; j ++) {
- band_sum += energies[energies.size() - j - 1][i];
+ band_sum += LIN2DB(energies[energies.size() - j - 1][i]);
}
if (max_energy < band_sum) {
max_energy = band_sum;