diff options
| author | Comment <tim@gray.(none)> | 2013-05-21 01:06:38 +0100 |
|---|---|---|
| committer | Comment <tim@gray.(none)> | 2013-05-21 01:06:38 +0100 |
| commit | e453cc17916908104467875db31e3fa08817cce1 (patch) | |
| tree | 4f89f8d0b1d2cad4b5ffd1ec7607a846c26dedfd /vamphost/src/testApp.cpp | |
| parent | cb7ec4965e6ec3d2142522c5c110b240f800e55d (diff) | |
vamphost
Diffstat (limited to 'vamphost/src/testApp.cpp')
| -rw-r--r-- | vamphost/src/testApp.cpp | 182 |
1 files changed, 172 insertions, 10 deletions
diff --git a/vamphost/src/testApp.cpp b/vamphost/src/testApp.cpp index adf7416..d04ce5c 100644 --- a/vamphost/src/testApp.cpp +++ b/vamphost/src/testApp.cpp @@ -3,37 +3,199 @@ //-------------------------------------------------------------- void testApp::setup() { + ofSetVerticalSync(true); + ofSetCircleResolution(80); + ofBackground(54, 54, 54); + + // 0 output channels, + // 2 input channels + // 44100 samples per second + // 256 samples per buffer + // 4 num buffers (latency) + + soundStream.listDevices(); + + //if you want to set a different device id + //soundStream.setDeviceID(0); //bear in mind the device id corresponds to all audio devices, including input-only and output-only devices. + + int rate =44100; + int channels=2; + int outputNo=0; + + string soname="qm-vamp-plugins"; + string id="qm-tempotracker"; + int bufferSize = vamphost.init(soname,id,channels,rate,outputNo); + + + left.assign(bufferSize, 0.0); + right.assign(bufferSize, 0.0); + volHistory.assign(400, 0.0); + + bufferCounter = 0; + drawCounter = 0; + smoothedVol = 0.0; + scaledVol = 0.0; + + //if you want to set a different device id + //soundStream.setDeviceID(0); //bear in mind the device id corresponds to all audio devices, including input-only and output-only devices. + + soundStream.setup(this, 0, channels, rate, bufferSize, 4); + + + } //-------------------------------------------------------------- void testApp::update(){ + //lets scale the vol up to a 0-1 range + scaledVol = ofMap(smoothedVol, 0.0, 0.17, 0.0, 1.0, true); + + //lets record the volume into an array + volHistory.push_back( scaledVol ); + //if we are bigger the the size we want to record - lets drop the oldest value + if( volHistory.size() >= 400 ){ + volHistory.erase(volHistory.begin(), volHistory.begin()+1); + } } //-------------------------------------------------------------- void testApp::draw(){ - ofBackground(0, 0, 0); - ofSetColor(255, 255, 255); +ofSetColor(225); + ofDrawBitmapString("AUDIO INPUT EXAMPLE", 32, 32); + ofDrawBitmapString("press 's' to unpause the audio\n'e' to pause the audio", 31, 92); + + ofNoFill(); + + // draw the left channel: + ofPushStyle(); + ofPushMatrix(); + ofTranslate(32, 170, 0); + + ofSetColor(225); + ofDrawBitmapString("Left Channel", 4, 18); + + ofSetLineWidth(1); + ofRect(0, 0, 512, 200); + + ofSetColor(245, 58, 135); + ofSetLineWidth(3); + + ofBeginShape(); + for (int i = 0; i < left.size(); i++){ + ofVertex(i*2, 100 -left[i]*180.0f); + } + ofEndShape(false); + + ofPopMatrix(); + ofPopStyle(); + + // draw the right channel: + ofPushStyle(); + ofPushMatrix(); + ofTranslate(32, 370, 0); + + ofSetColor(225); + ofDrawBitmapString("Right Channel", 4, 18); + + ofSetLineWidth(1); + ofRect(0, 0, 512, 200); + + ofSetColor(245, 58, 135); + ofSetLineWidth(3); + + ofBeginShape(); + for (int i = 0; i < right.size(); i++){ + ofVertex(i*2, 100 -right[i]*180.0f); + } + ofEndShape(false); + + ofPopMatrix(); + ofPopStyle(); + + // draw the average volume: + ofPushStyle(); + ofPushMatrix(); + ofTranslate(565, 170, 0); + + ofSetColor(225); + ofDrawBitmapString("Scaled average vol (0-100): " + ofToString(scaledVol * 100.0, 0), 4, 18); + ofRect(0, 0, 400, 400); + + ofSetColor(245, 58, 135); + ofFill(); + ofCircle(200, 200, scaledVol * 190.0f); + + //lets draw the volume history as a graph + ofBeginShape(); + for (int i = 0; i < volHistory.size(); i++){ + if( i == 0 ) ofVertex(i, 400); + + ofVertex(i, 400 - volHistory[i] * 70); + + if( i == volHistory.size() -1 ) ofVertex(i, 400); + } + ofEndShape(false); + + ofPopMatrix(); + ofPopStyle(); + + drawCounter++; + + ofSetColor(225); + string reportString = "buffers received: "+ofToString(bufferCounter)+"\ndraw routines called: "+ofToString(drawCounter)+"\nticks: " + ofToString(soundStream.getTickCount()); + ofDrawBitmapString(reportString, 32, 589); + +} + +void testApp::audioIn(float * input, int bufferSize, int nChannels){ + + float curVol = 0.0; + + // samples are "interleaved" + int numCounted = 0; + + //lets go through each sample and calculate the root mean square which is a rough way to calculate volume + for (int i = 0; i < bufferSize; i++){ + left[i] = input[i*2]*0.5; + right[i] = input[i*2+1]*0.5; + + curVol += left[i] * left[i]; + curVol += right[i] * right[i]; + numCounted+=2; + } + + //this is how we get the mean of rms :) + curVol /= (float)numCounted; + + // this is how we get the root of rms :) + curVol = sqrt( curVol ); + + smoothedVol *= 0.93; + smoothedVol += 0.07 * curVol; + + bufferCounter++; + + vamphost.process_frame(input,bufferSize); } //-------------------------------------------------------------- void testApp::exit(){ - + vamphost.cleanup(); } //-------------------------------------------------------------- void testApp::keyPressed(int key){ - switch (key) { - case 's': - case 'S': - break; - case 'p': - case 'P': - break; + if( key == 's' ){ + soundStream.start(); + } + + if( key == 'e' ){ + soundStream.stop(); } } |
