summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Redfern <tim@eclectronics.org>2013-05-23 18:19:13 +0100
committerTim Redfern <tim@eclectronics.org>2013-05-23 18:19:13 +0100
commit63971c9b5e2dcfa1b7e254cac9cac5629c776835 (patch)
treed8eca036763531fd9cb9191ebf3c241f2efb9868
parent0f5301b988bad81b2f27ba4d88c6ee3d0205603a (diff)
rearrange folders: working vamp host
-rwxr-xr-x02_rec/Makefile2
-rw-r--r--02_rec/addons.make5
-rw-r--r--02_rec/bin/data/verdana.ttfbin0 -> 171792 bytes
-rwxr-xr-x02_rec/config.make56
-rw-r--r--02_rec/src/main.cpp17
-rw-r--r--02_rec/src/testApp.cpp199
-rw-r--r--02_rec/src/testApp.h42
-rw-r--r--03_play/src/testApp.h2
-rw-r--r--vamphost/src/ofxVamphost.cpp10
-rw-r--r--vamphost/src/ofxVamphost.h5
-rw-r--r--vamphost/src/testApp.cpp11
-rwxr-xr-xvamphost/vamphost.cbp6
12 files changed, 352 insertions, 3 deletions
diff --git a/02_rec/Makefile b/02_rec/Makefile
new file mode 100755
index 0000000..2d83a77
--- /dev/null
+++ b/02_rec/Makefile
@@ -0,0 +1,2 @@
+include config.make
+include $(OF_ROOT)/libs/openFrameworksCompiled/project/makefileCommon/Makefile.examples
diff --git a/02_rec/addons.make b/02_rec/addons.make
new file mode 100644
index 0000000..0b4df47
--- /dev/null
+++ b/02_rec/addons.make
@@ -0,0 +1,5 @@
+ofxOpenNI
+ofxFenster
+ofxGui
+ofxXmlSettings
+ofxMayaCam
diff --git a/02_rec/bin/data/verdana.ttf b/02_rec/bin/data/verdana.ttf
new file mode 100644
index 0000000..8f25a64
--- /dev/null
+++ b/02_rec/bin/data/verdana.ttf
Binary files differ
diff --git a/02_rec/config.make b/02_rec/config.make
new file mode 100755
index 0000000..821a73a
--- /dev/null
+++ b/02_rec/config.make
@@ -0,0 +1,56 @@
+# add custom variables to this file
+
+# OF_ROOT allows to move projects outside apps/* just set this variable to the
+# absoulte path to the OF root folder
+
+OF_ROOT = ../../openFrameworks
+
+
+# USER_CFLAGS allows to pass custom flags to the compiler
+# for example search paths like:
+# USER_CFLAGS = -I src/objects
+
+USER_CFLAGS = -I $(OF_ROOT)/addons/ofxOpenNI/include/openni -I $(OF_ROOT)/addons/ofxOpenNI/include/nite -I $(OF_ROOT)/addons/ofxOpenNI/src
+
+
+# USER_LDFLAGS allows to pass custom flags to the linker
+# for example libraries like:
+# USER_LDFLAGS = libs/libawesomelib.a
+
+USER_LDFLAGS = -lOpenNI
+
+
+EXCLUDE_FROM_SOURCE="bin,.xcodeproj,obj"
+
+# change this to add different compiler optimizations to your project
+
+USER_COMPILER_OPTIMIZATION = -march=native -mtune=native -Os
+
+
+# android specific, in case you want to use different optimizations
+USER_LIBS_ARM =
+USER_LIBS_ARM7 =
+USER_LIBS_NEON =
+
+# android optimizations
+
+ANDROID_COMPILER_OPTIMIZATION = -Os
+
+NDK_PLATFORM = android-8
+
+# uncomment this for custom application name (if the folder name is different than the application name)
+#APPNAME = folderName
+
+# uncomment this for custom package name, must be the same as the java package that contains OFActivity
+#PKGNAME = cc.openframeworks.$(APPNAME)
+
+
+
+
+
+# linux arm flags
+
+LINUX_ARM7_COMPILER_OPTIMIZATIONS = -march=armv7-a -mtune=cortex-a8 -finline-functions -funroll-all-loops -O3 -funsafe-math-optimizations -mfpu=neon -ftree-vectorize -mfloat-abi=hard -mfpu=vfp
+
+
+
diff --git a/02_rec/src/main.cpp b/02_rec/src/main.cpp
new file mode 100644
index 0000000..87dc35f
--- /dev/null
+++ b/02_rec/src/main.cpp
@@ -0,0 +1,17 @@
+
+#include "testApp.h"
+#include "ofMain.h"
+#include "ofAppGlutWindow.h"
+
+//========================================================================
+int main( ){
+
+ ofAppGlutWindow window;
+ ofSetupOpenGL(&window, 1600,900, OF_FULLSCREEN); // <-------- 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 testApp());
+
+}
diff --git a/02_rec/src/testApp.cpp b/02_rec/src/testApp.cpp
new file mode 100644
index 0000000..376d357
--- /dev/null
+++ b/02_rec/src/testApp.cpp
@@ -0,0 +1,199 @@
+#include "testApp.h"
+
+//--------------------------------------------------------------
+void testApp::setup() {
+
+ ofSetLogLevel(OF_LOG_NOTICE);
+
+ numDevices = openNIRecorders[0].getNumDevices();
+
+ for (int deviceID = 0; deviceID < numDevices; deviceID++){
+ //openNIRecorders[deviceID].setLogLevel(OF_LOG_VERBOSE);
+ openNIRecorders[deviceID].setup(false);
+ openNIRecorders[deviceID].addDepthGenerator();
+ openNIRecorders[deviceID].addImageGenerator();
+ openNIRecorders[deviceID].setRegister(true); // this registers all the image pixels to the depth pixels
+ openNIRecorders[deviceID].setMirror(true); // flips the image and depth sensors
+ openNIRecorders[deviceID].start();
+
+ openNIPlayers[deviceID].setup(false);
+ openNIPlayers[deviceID].start();
+
+ filenames[deviceID]="";
+ }
+
+ isLive=true;
+ isRecording=false;
+
+ verdana.loadFont(ofToDataPath("verdana.ttf"), 10);
+
+ startSound.loadSound("tone1.wav");
+ stopSound.loadSound("tone0.wav");;
+}
+
+
+string testApp::generateFileName(int cam) {
+
+ string _root = "kinectRecord_";
+
+ string _timestamp = ofToString(ofGetDay()) +
+ ofToString(ofGetMonth()) +
+ ofToString(ofGetYear()) +
+ ofToString(ofGetHours()) +
+ ofToString(ofGetMinutes()) +
+ ofToString(ofGetSeconds());
+
+ string _filename = (_root + ofToString(cam)+"_"+_timestamp + ".oni");
+
+ return _filename;
+
+}
+
+//--------------------------------------------------------------
+void testApp::update(){
+ for (int deviceID = 0; deviceID < numDevices; deviceID++){
+ if (isLive) {
+ openNIRecorders[deviceID].update();
+ if (isRecording){
+ recorded++;
+ }
+ }
+ else {
+ openNIPlayers[deviceID].update();
+ }
+ }
+}
+
+//--------------------------------------------------------------
+void testApp::draw(){
+ ofBackground(0, 0, 0);
+ ofSetColor(255, 255, 255);
+
+ ofPushMatrix();
+
+ for (int deviceID = 0; deviceID < numDevices; deviceID++){
+ ofTranslate(0, deviceID * 450);
+ if (isLive) {
+ //openNIRecorders[deviceID].drawDebug(); // draws all generators
+ openNIRecorders[deviceID].drawDepth(200, 0,600,450);
+ openNIRecorders[deviceID].drawImage(800, 0,600,450);
+ }
+ else {
+ //openNIPlayers[deviceID].drawDebug();
+ openNIPlayers[deviceID].drawDepth(200, 0,600,450);
+ openNIPlayers[deviceID].drawImage(800, 0,600,450);
+ }
+ }
+
+ ofPopMatrix();
+
+ ofSetColor(255, 255, 255);
+ string msg = "MILLIS: " + ofToString(ofGetElapsedTimeMillis()) + "\nFPS: " + ofToString(ofGetFrameRate());
+ if (isRecording) {
+ msg +="\nrecorded "+ofToString(recorded);
+ }
+ if (!isLive) {
+ msg +="\n"+filenames[0];
+ }
+ verdana.drawString(msg, 10, 10);
+}
+
+//--------------------------------------------------------------
+void testApp::exit(){
+ for (int deviceID = 0; deviceID < numDevices; deviceID++){
+ openNIRecorders[deviceID].stop();
+ openNIPlayers[deviceID].stop();
+ }
+}
+
+//--------------------------------------------------------------
+void testApp::keyPressed(int key){
+ switch (key) {
+ case 's':
+ case 'S':
+ if (isRecording) {
+ for (int deviceID = 0; deviceID < numDevices; deviceID++){
+ openNIRecorders[deviceID].stopRecording();
+ stopSound.play();
+ }
+ isRecording = false;
+ break;
+ } else {
+ for (int deviceID = 0; deviceID < numDevices; deviceID++){
+ filenames[deviceID]=generateFileName(deviceID);
+ openNIRecorders[deviceID].startRecording(generateFileName(deviceID));
+ startSound.play();
+ }
+ isRecording = true;
+ recorded=0;
+ break;
+ }
+ break;
+ case 'p':
+ case 'P':
+ if (filenames[0] != "" && !isRecording && isLive) {
+ for (int deviceID = 0; deviceID < numDevices; deviceID++){
+ openNIRecorders[deviceID].stopRecording();
+ }
+ for (int deviceID = 0; deviceID < numDevices; deviceID++){
+ openNIPlayers[deviceID].startPlayer(filenames[deviceID]);
+ }
+ isLive = false;
+ //whichUser=&playUser;
+ //whichImage=&playImage;
+ } else {
+ isLive = true;
+ //whichUser=&recordUser;
+ //whichImage=&recordImage;
+ }
+ break;
+ }
+
+ /* why do this?
+ switch (key) {
+ case 't':
+ for (int deviceID = 0; deviceID < numDevices; deviceID++){
+ openNIRecorders[deviceID].toggleRegister();
+ }
+ break;
+ case 'x':
+ for (int deviceID = 0; deviceID < numDevices; deviceID++){
+ openNIRecorders[deviceID].stop();
+ }
+ break;
+ default:
+ break;
+ }
+ */
+}
+
+//--------------------------------------------------------------
+void testApp::keyReleased(int key){
+
+}
+
+//--------------------------------------------------------------
+void testApp::mouseMoved(int x, int y ){
+
+}
+
+//--------------------------------------------------------------
+void testApp::mouseDragged(int x, int y, int button){
+
+}
+
+//--------------------------------------------------------------
+void testApp::mousePressed(int x, int y, int button){
+
+}
+
+//--------------------------------------------------------------
+void testApp::mouseReleased(int x, int y, int button){
+
+}
+
+//--------------------------------------------------------------
+void testApp::windowResized(int w, int h){
+
+}
+
diff --git a/02_rec/src/testApp.h b/02_rec/src/testApp.h
new file mode 100644
index 0000000..ffb92e9
--- /dev/null
+++ b/02_rec/src/testApp.h
@@ -0,0 +1,42 @@
+#ifndef _TEST_APP
+#define _TEST_APP
+
+#include "ofxOpenNI.h"
+#include "ofMain.h"
+
+#define MAX_DEVICES 2
+
+class testApp : public ofBaseApp{
+
+public:
+ void setup();
+ void update();
+ void draw();
+ void exit();
+
+ 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);
+ string generateFileName(int cam);
+
+ int numDevices;
+ ofxOpenNI openNIRecorders[MAX_DEVICES];
+ ofxOpenNI openNIPlayers[MAX_DEVICES];
+ string filenames[MAX_DEVICES];
+
+ bool isLive, isRecording;
+
+ ofTrueTypeFont verdana;
+
+ ofSoundPlayer startSound;
+ ofSoundPlayer stopSound;
+
+ int recorded;
+
+};
+
+#endif
diff --git a/03_play/src/testApp.h b/03_play/src/testApp.h
index b0ca2c3..db29f0c 100644
--- a/03_play/src/testApp.h
+++ b/03_play/src/testApp.h
@@ -33,6 +33,8 @@ public:
vector<vector<string> > recs;
ofxXmlSettings XML;
+
+ vector<pair<string,string> > filenames;
};
diff --git a/vamphost/src/ofxVamphost.cpp b/vamphost/src/ofxVamphost.cpp
index 1ba2b4e..3844c60 100644
--- a/vamphost/src/ofxVamphost.cpp
+++ b/vamphost/src/ofxVamphost.cpp
@@ -127,6 +127,11 @@ int Vamphost::init(const string &soname,const string &id,const int &_channels,co
featureNo=1;
+
+ avg=0.0f;
+ num=0;
+ numFeat=0;
+
return blockSize;
}
void Vamphost::process_frame(float *data,int samples_in_frame){
@@ -145,6 +150,8 @@ void Vamphost::process_frame(float *data,int samples_in_frame){
while(sample<samples_in_frame&&in_block<blockSize) {
for (int i=0;i<channels;i++) {
plugbuf[i][in_block]=data[sample];
+ num++;
+ avg+=(data[sample]/num);
}
in_block++;
sample++;
@@ -158,9 +165,12 @@ void Vamphost::process_frame(float *data,int samples_in_frame){
Plugin::FeatureSet feat=plugin->process(plugbuf, rt);
+ if (feat[outputNo].size()>0) cerr<<"BEAT"<<endl;
+
for (unsigned int i = 0; i < feat[outputNo].size(); ++i) {
features[((float)feat[outputNo][i].timestamp.sec)+(((float)feat[outputNo][i].timestamp.nsec)*.000000001)]=featureNo;
featureNo++;
+ numFeat++;
}
//shunt it down
diff --git a/vamphost/src/ofxVamphost.h b/vamphost/src/ofxVamphost.h
index fe36d06..2c618eb 100644
--- a/vamphost/src/ofxVamphost.h
+++ b/vamphost/src/ofxVamphost.h
@@ -29,6 +29,10 @@ class Vamphost{
//map<time,featureNo>
//this is the best way to store features: because map allows to search for the key below and above the present time
int getRT();
+
+ float avg;
+ int num;
+ int numFeat;
private:
PluginLoader *loader;
@@ -45,6 +49,7 @@ class Vamphost{
int featureNo;
+
};
#endif
diff --git a/vamphost/src/testApp.cpp b/vamphost/src/testApp.cpp
index b431fce..659ed35 100644
--- a/vamphost/src/testApp.cpp
+++ b/vamphost/src/testApp.cpp
@@ -22,8 +22,12 @@ void testApp::setup() {
int channels=1;
int outputNo=0;
- string soname="qm-vamp-plugins";
- string id="qm-tempotracker";
+ //string soname="qm-vamp-plugins";
+ //string id="qm-tempotracker";
+ //string id="qm-barbeattracker";
+
+ string soname="vamp-example-plugins.so";
+ string id="percussiononsets";
int bufferSize = vamphost.init(soname,id,channels,rate,outputNo);
@@ -149,7 +153,7 @@ ofSetColor(225);
ofSetColor(225);
string reportString = "buffers received: "+ofToString(bufferCounter)+"\ndraw routines called: "+ofToString(drawCounter)+"\nticks: " + ofToString(soundStream.getTickCount());
- reportString +="\nfeatures found: "+ofToString(vamphost.features.size());
+ reportString +="\nfeatures found: "+ofToString(vamphost.numFeat)+" average signal: "+ofToString(vamphost.avg)+" samples: "+ofToString(vamphost.num);
ofDrawBitmapString(reportString, 32, 589);
}
@@ -183,6 +187,7 @@ void testApp::audioIn(float * input, int bufferSize, int nChannels){
bufferCounter++;
+ //input would seem to be in the range 0..1
vamphost.process_frame(input,bufferSize);
diff --git a/vamphost/vamphost.cbp b/vamphost/vamphost.cbp
index 4137986..6a22a01 100755
--- a/vamphost/vamphost.cbp
+++ b/vamphost/vamphost.cbp
@@ -36,6 +36,12 @@
<Unit filename="src/main.cpp">
<Option virtualFolder="src/" />
</Unit>
+ <Unit filename="src/ofxVamphost.cpp">
+ <Option virtualFolder="src/" />
+ </Unit>
+ <Unit filename="src/ofxVamphost.h">
+ <Option virtualFolder="src/" />
+ </Unit>
<Unit filename="src/testApp.cpp">
<Option virtualFolder="src/" />
</Unit>