diff options
| author | Tim Redfern <tim@getdrop.com> | 2022-11-15 01:48:26 +0000 |
|---|---|---|
| committer | Tim Redfern <tim@getdrop.com> | 2022-11-15 01:48:26 +0000 |
| commit | 25467cc7d96c56eb2b739a3ffb093ab5a9c57b13 (patch) | |
| tree | 94a350bc12ad4735858b58156590ae257f48f358 /audioin/src | |
| parent | af28dee8c32670db6a9eaf19793678a119cf1dd4 (diff) | |
testing oscilloscope latency
Diffstat (limited to 'audioin/src')
| -rw-r--r-- | audioin/src/main.cpp | 13 | ||||
| -rw-r--r-- | audioin/src/ofApp.cpp | 144 | ||||
| -rw-r--r-- | audioin/src/ofApp.h | 68 |
3 files changed, 225 insertions, 0 deletions
diff --git a/audioin/src/main.cpp b/audioin/src/main.cpp new file mode 100644 index 0000000..e57370b --- /dev/null +++ b/audioin/src/main.cpp @@ -0,0 +1,13 @@ +#include "ofMain.h" +#include "ofApp.h" + +//======================================================================== +int main( ){ + ofSetupOpenGL(1024,768,OF_WINDOW); // <-------- setup the GL context + + // this kicks off the running of my app + // can be OF_WINDOW or OF_FULLSCREEN + // pass in width and height too: + ofRunApp(new ofApp()); + +} diff --git a/audioin/src/ofApp.cpp b/audioin/src/ofApp.cpp new file mode 100644 index 0000000..4535c3c --- /dev/null +++ b/audioin/src/ofApp.cpp @@ -0,0 +1,144 @@ +#include "ofApp.h" +void ofApp::setup(){ + + int frameRate=60; + + ofSetFrameRate(frameRate); + ofBackground(0); + ofEnableSmoothing(); + ofEnableAlphaBlending(); + ofSetVerticalSync(true); + + blockSize = SAMPLERATE / (frameRate*20); //200 + + soundStream.setup(this,0, 1, SAMPLERATE, blockSize, 1); + + buffer=Buffer(SAMPLERATE); + + vScale=3.0f; + hScale=8.0f; + +} +void ofApp::update(){ + + +} + +int sampleNum=0; +int frameNum=0; + +void ofApp::draw(){ + ofBackground(0); + + ofPushMatrix(); + + ofTranslate(0,ofGetHeight()/2); + + ofScale(1.0f,ofGetHeight()*vScale); + + ofPolyline line; + line.addVertex(0,buffer[0]); + + float i=0.0f; + while (i<ofGetWidth()){ + line.curveTo(i,buffer[(int)i]); + i+=hScale; + } + + line.draw(); + + ofPopMatrix(); + + frameNum++; + +} + + + +void ofApp::audioIn(float * input, int blockSize, int nChannels){ + //ofLog()<< "frame "<<frameNum<<" ,got blockr "<<sampleNum++<<" , "<<nChannels<<" channels "<<blockSize<<" samples"; + +// for (int i=0;i<blockSize;i++){ +// buffer.push_front() +// } + + //ofLog()<< "samples: "<<input[0]<<" "<<input[1]<<" "<<input[2]<<" "; + + buffer.add(input,blockSize); + +} + + + + +//-------------------------------------------------------------- +void ofApp::keyPressed(int key){ + switch(key){ + case 'f':{ + ofToggleFullscreen(); + break; + } + case 'i':{ + vScale*=1.1f; + ofLog()<< "vScale: "<<vScale; + break; + } + case 'm':{ + vScale/=1.1f; + ofLog()<< "vScale: "<<vScale; + break; + } + case 'j':{ + hScale*=1.1f; + ofLog()<< "hScale: "<<hScale; + break; + } + case 'k':{ + hScale/=1.1f; + ofLog()<< "hScale: "<<hScale; + break; + } + default: + break; + } + +} + +//-------------------------------------------------------------- +void ofApp::keyReleased(int key){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseMoved(int x, int y ){ + +} + +void ofApp::mouseDragged(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void ofApp::mousePressed(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseReleased(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void ofApp::windowResized(int w, int h){ + +} + +//-------------------------------------------------------------- +void ofApp::gotMessage(ofMessage msg){ + +} + +//-------------------------------------------------------------- +void ofApp::dragEvent(ofDragInfo dragInfo){ + +} diff --git a/audioin/src/ofApp.h b/audioin/src/ofApp.h new file mode 100644 index 0000000..cecc23e --- /dev/null +++ b/audioin/src/ofApp.h @@ -0,0 +1,68 @@ +#pragma once + +#include "ofMain.h" + +#include <baudvine/ringbuf.h> + +#define SAMPLERATE 48000 +#define min(a,b) (a<b?a:b) + +class Buffer{ +public: + Buffer(size_t sz=0){ + if (sz){ + data =new float[sz]; + size=sz; + } + } + ~Buffer(){ + delete data; + } + void add(float * input, int num){ + memcpy(&data[writePoint],input,min(num,size-writePoint)*4); + if (size-writePoint<num){ + memcpy(data,&input[size-writePoint],(num-(size-writePoint))*4); + writePoint=num-(size-writePoint); + } + else writePoint+=num; + } + float operator [] (int i) const {return data[writePoint>i?writePoint-i:size-(i-writePoint)];} + float& operator [] (int i) {return data[writePoint>i?writePoint-i:size-(i-writePoint)];} +private: + size_t size; + float *data; + int writePoint; +}; + +class ofApp : public ofBaseApp{ + + public: + void setup(); + void update(); + void draw(); + + void keyPressed(int key); + void keyReleased(int key); + void mouseMoved(int x, int y ); + void mouseDragged(int x, int y, int button); + void mousePressed(int x, int y, int button); + void mouseReleased(int x, int y, int button); + void windowResized(int w, int h); + void dragEvent(ofDragInfo dragInfo); + void gotMessage(ofMessage msg); + + void audioIn(float * input, int bufferSize, int nChannels); + + ofSoundStream soundStream; + int blockSize; + int sampleRate; + + int frameHead; //last sample drawn + + //baudvine::RingBuf<float, SAMPLERATE> buffer; + + Buffer buffer; + + float hScale; + float vScale; +}; |
