summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorComment <tim@gray.(none)>2013-06-16 15:17:38 +0100
committerComment <tim@gray.(none)>2013-06-16 15:17:38 +0100
commitf714b852416caeaa20c91c9b0336a7d067e28ddb (patch)
treeab6f3ac12c5413b762899b797aff784d1a1c5b15
parent10cda57dfc85867fcce98c83eb057d7ae4cfb381 (diff)
unsuccessful attempt to wrap oni player
-rwxr-xr-x04_playobjects/Makefile2
-rw-r--r--04_playobjects/Makfile244
-rw-r--r--04_playobjects/addons.make5
-rwxr-xr-x04_playobjects/config.mak56
-rwxr-xr-x04_playobjects/config.make59
-rw-r--r--04_playobjects/src/main.cpp17
-rw-r--r--04_playobjects/src/testApp.cpp183
-rw-r--r--04_playobjects/src/testApp.h106
8 files changed, 672 insertions, 0 deletions
diff --git a/04_playobjects/Makefile b/04_playobjects/Makefile
new file mode 100755
index 0000000..2d83a77
--- /dev/null
+++ b/04_playobjects/Makefile
@@ -0,0 +1,2 @@
+include config.make
+include $(OF_ROOT)/libs/openFrameworksCompiled/project/makefileCommon/Makefile.examples
diff --git a/04_playobjects/Makfile b/04_playobjects/Makfile
new file mode 100644
index 0000000..0d8b4a1
--- /dev/null
+++ b/04_playobjects/Makfile
@@ -0,0 +1,244 @@
+# openFrameworks OS X makefile
+#
+# make help : shows this message
+# make Debug: makes the application with debug symbols
+# make Release: makes the app with optimizations
+# make: the same as make Release
+# make CleanDebug: cleans the Debug target
+# make CleanRelease: cleans the Release target
+# make clean: cleans everything
+#
+#
+# this should work with any OF app, just copy any example
+# change the name of the folder and it should compile
+# only .cpp support, don't use .c files
+# it will look for files in any folder inside the application
+# folder except that in the EXCLUDE_FROM_SOURCE variable
+# it doesn't autodetect include paths yet
+# add the include paths in the USER_CFLAGS variable
+# using the gcc syntax: -Ipath
+#
+# to add addons to your application, edit the addons.make file
+# in this directory and add the names of the addons you want to
+# include
+#
+# edit the following vars to customize the makefile
+
+include config.mak
+ARCH = i386
+
+COMPILER_OPTIMIZATION = $(USER_COMPILER_OPTIMIZATION)
+
+EXCLUDE_FROM_SOURCE="bin,.xcodeproj,obj"
+
+# you shouldn't modify anything below this line
+SHELL = /bin/sh
+CXX = g++
+LIBSPATH=osx
+
+NODEPS = clean
+SED_EXCLUDE_FROM_SRC = $(shell echo $(EXCLUDE_FROM_SOURCE) | sed s/\,/\\\\\|/g)
+SOURCE_DIRS = src
+#$(shell find . -maxdepth 1 -mindepth 1 -type d | grep -v $(SED_EXCLUDE_FROM_SRC) | sed s/.\\///)
+SOURCES = $(shell find $(SOURCE_DIRS) -name "*.cpp" -or -name "*.c")
+OBJFILES = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCES)))
+APPNAME = $(shell basename `pwd`)
+CORE_INCLUDES = $(shell find $(OF_ROOT)/libs/openFrameworks/ -type d)
+CORE_INCLUDE_FLAGS = $(addprefix -I,$(CORE_INCLUDES))
+INCLUDES = $(shell find $(OF_ROOT)/libs/*/include -type d | grep -v glu | grep -v quicktime | grep -v poco)
+INCLUDES_FLAGS = $(addprefix -I,$(INCLUDES))
+INCLUDES_FLAGS += -I$(OF_ROOT)/libs/poco/include
+INCLUDES_FLAGS += -I$(OF_ROOT)/libs/glu/include
+#INCLUDES_FLAGS += -I$(OF_ROOT)/libs/quicktime/include
+
+LIB_STATIC = $(shell ls $(OF_ROOT)/libs/*/lib/$(LIBSPATH)/*.a | grep -v openFrameworksCompiled | grep -v poco)
+LIB_STATIC += $(OF_ROOT)/libs/fmodex/lib/osx/libfmodex.dylib
+LIB_SHARED = $(shell ls $(OF_ROOT)/libs/*/lib/$(LIBSPATH)/*.so | grep -v openFrameworksCompiled | grep -v poco)
+LIB_STATIC += $(OF_ROOT)/libs/poco/lib/$(LIBSPATH)/PocoNet.a $(OF_ROOT)/libs/poco/lib/$(LIBSPATH)/PocoXML.a $(OF_ROOT)/libs/poco/lib/$(LIBSPATH)/PocoUtil.a $(OF_ROOT)/libs/poco/lib/$(LIBSPATH)/PocoFoundation.a
+LIB_PATHS_FLAGS = $(shell ls -d $(OF_ROOT)/libs/*/lib/$(LIBSPATH) | sed "s/\(\.*\)/-L\1/")
+
+CFLAGS += -Wall -fexceptions
+CFLAGS += -I.
+CFLAGS += $(INCLUDES_FLAGS)
+CFLAGS += $(CORE_INCLUDE_FLAGS)
+CFLAGS += -x c++ -arch $(ARCH) -fmessage-length=0 -pipe -Wno-trigraphs -fpascal-strings -Os -fasm-blocks -Wno-deprecated-declarations -Wno-invalid-offsetof -gdwarf-2 -msse3 -mssse3
+
+LIBS += $(LIB_SHARED)
+LIBS += $(LIB_STATIC)
+
+LDFLAGS = $(LIB_PATHS_FLAGS) -Wl
+LIBS += -F$(OF_ROOT)/libs/glut/lib/osx -framework AppKit -framework Cocoa -framework IOKit -framework AGL -framework AudioToolbox -framework Carbon -framework CoreAudio -CoreFoundation -framework CoreServices -framework GLUT -framework OpenGL -framework Quicktime
+
+#Targets
+ifeq ($(findstring Debug,$(MAKECMDGOALS)),Debug)
+ TARGET_CFLAGS = -g
+ TARGET_LIBS = $(OF_ROOT)/libs/openFrameworksCompiled/lib/osx/openFrameworksDebug.a
+ TARGET_NAME = Debug
+endif
+
+ifeq ($(findstring Release,$(MAKECMDGOALS)),Release)
+ TARGET_CFLAGS = $(COMPILER_OPTIMIZATION)
+ TARGET_LIBS = $(OF_ROOT)/libs/openFrameworksCompiled/lib/osx/openFrameworks.a
+ TARGET_NAME = Release
+endif
+
+ifeq ($(findstring Debug,$(MAKECMDGOALS)),Debug)
+ BIN_NAME = $(APPNAME)_debug
+ TARGET = bin/$(BIN_NAME)
+endif
+
+ifeq ($(findstring Release,$(MAKECMDGOALS)),Release)
+ BIN_NAME = $(APPNAME)
+ TARGET = bin/$(BIN_NAME)
+endif
+
+ifeq ($(findstring Release,$(MAKECMDGOALS)),clang)
+ CXX = clang
+endif
+
+ifeq ($(MAKECMDGOALS),)
+ TARGET_NAME = Release
+ BIN_NAME = $(APPNAME)
+ TARGET = bin/$(BIN_NAME)
+ TARGET_LIBS = $(OF_ROOT)/libs/openFrameworksCompiled/lib/osx/openFrameworks.a
+endif
+
+ifeq ($(MAKECMDGOALS),clean)
+ TARGET = bin/$(APPNAME)_debug bin/$(APPNAME)
+endif
+
+
+#Output
+OBJ_OUTPUT = obj/$(TARGET_NAME)/
+CLEANTARGET = clean$(TARGET_NAME)
+OBJS = $(addprefix $(OBJ_OUTPUT), $(OBJFILES))
+DEPFILES = $(patsubst %.o,%.d,$(OBJS))
+ifeq ($(findstring addons.make,$(wildcard *.make)),addons.make)
+ ADDONS = $(shell cat addons.make)
+ ADDONS_REL_DIRS = $(addsuffix /src, $(ADDONS))
+ ADDONS_LIBS_REL_DIRS = $(addsuffix /libs, $(ADDONS))
+ ADDONS_DIRS = $(addprefix $(OF_ROOT)/addons/, $(ADDONS_REL_DIRS) )
+ ADDONS_LIBS_DIRS = $(addprefix $(OF_ROOT)/addons/, $(ADDONS_LIBS_REL_DIRS) )
+ ADDONS_BIN_LIBS_DIRS = $(addsuffix /*/lib/$(LIBSPATH), $(ADDONS_LIBS_DIRS) )
+ ADDONS_INCLUDES = $(ADDONS_DIRS)
+ ADDONS_INCLUDES = $(ADDONS_LIBS_DIRS)
+ ADDONS_INCLUDES += $(shell find $(ADDONS_DIRS) -type d 2> /dev/null)
+ ADDONS_INCLUDES += $(shell find $(ADDONS_LIBS_DIRS) -type d 2> /dev/null)
+ ADDONSCFLAGS = $(addprefix -I,$(ADDONS_INCLUDES))
+ifeq ($(findstring libsorder.make,$(shell find $(ADDONS_BIN_LIBS_DIRS) -name libsorder.make 2> /dev/null)),libsorder.make)
+ ADDONS_LIBS_W_ORDER = $(shell cat $(shell find $(ADDONS_BIN_LIBS_DIRS) -name libsorder.make 2> /dev/null))
+ SED_EXCLUDE_LIBS = $(addsuffix \|,$(ADDONS_LIBS_W_ORDER))
+ ADDONS_LIBS_STATICS = $(shell find $(ADDONS_BIN_LIBS_DIRS) -name *.a 2> /dev/null | grep -v '$(SED_EXCLUDE_LIBS)')
+ else
+ ADDONS_LIBS_STATICS = $(shell find $(ADDONS_BIN_LIBS_DIRS) -name *.a 2> /dev/null)
+ endif
+
+ ADDONS_LIBS_STATICS += $(addprefix -l, $(ADDONS_LIBS_W_ORDER))
+ ADDONS_LIBS_STATICS += $(addprefix -L, $(shell find $(ADDONS_BIN_LIBS_DIRS) -name libsorder.make 2> /dev/null | sed s/libsorder.make//g))
+ ADDONS_LIBS_SHARED = $(shell find $(ADDONS_BIN_LIBS_DIRS) -name *.so 2> /dev/null)
+ ADDONSLIBS = $(ADDONS_LIBS_STATICS)
+ ADDONSLIBS += $(ADDONS_LIBS_SHARED)
+
+
+ ADDONS_SOURCES = $(shell find $(ADDONS_DIRS) -name "*.cpp" -or -name "*.c" 2> /dev/null)
+ ADDONS_SOURCES += $(shell find $(ADDONS_LIBS_DIRS) -name "*.cpp" -or -name "*.c" -or -name "*.cc" 2>/dev/null)
+ ADDONS_OBJFILES = $(subst $(OF_ROOT)/, ,$(patsubst %.cc,%.o,$(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(ADDONS_SOURCES)))))
+ ADDONS_OBJS = $(addprefix $(OBJ_OUTPUT), $(ADDONS_OBJFILES))
+ DEPFILES += $(patsubst %.o,%.d,$(ADDONS_OBJS))
+endif
+
+.PHONY: Debug Release all after
+
+Release: $(TARGET) after
+
+Debug: $(TARGET) after
+
+all:
+ $(MAKE) Release
+
+
+
+#This rule does the compilation
+#$(OBJS): $(SOURCES)
+$(OBJ_OUTPUT)%.o: %.cpp
+ @echo "compiling object for: " $<
+ mkdir -p $(@D)
+ $(CXX) -c $(TARGET_CFLAGS) $(CFLAGS) $(ADDONSCFLAGS) $(USER_CFLAGS) -MMD -MP -MF$(OBJ_OUTPUT)$*.d -MT$(OBJ_OUTPUT)$*.d -o$@ -c $<
+
+$(OBJ_OUTPUT)%.o: %.c
+ @echo "compiling object for: " $<
+ mkdir -p $(@D)
+ $(CXX) -c $(TARGET_CFLAGS) $(CFLAGS) $(ADDONSCFLAGS) $(USER_CFLAGS) -MMD -MP -MF$(OBJ_OUTPUT)$*.d -MT$(OBJ_OUTPUT)$*.d -o$@ -c $<
+
+
+$(OBJ_OUTPUT)%.o: $(OF_ROOT)/%.cpp
+ @echo "compiling addon object for" $<
+ mkdir -p $(@D)
+ $(CXX) $(TARGET_CFLAGS) $(CFLAGS) $(ADDONSCFLAGS) $(USER_CFLAGS) -MMD -MP -MF$(OBJ_OUTPUT)$*.d -MT$(OBJ_OUTPUT)$*.d -o $@ -c $<
+
+$(OBJ_OUTPUT)%.o: $(OF_ROOT)/%.c
+ @echo "compiling addon object for" $<
+ mkdir -p $(@D)
+ $(CXX) $(TARGET_CFLAGS) $(CFLAGS) $(ADDONSCFLAGS) $(USER_CFLAGS) -MMD -MP -MF$(OBJ_OUTPUT)$*.d -MT$(OBJ_OUTPUT)$*.d -o $@ -c $<
+
+$(TARGET): $(OBJS) $(ADDONS_OBJS)
+ @echo "linking" $(TARGET) $(GTK)
+ $(CXX) -arch $(ARCH) -v -o $@ $(OBJS) $(ADDONS_OBJS) $(USER_CFLAGS) $(LDFLAGS) $(USER_LDFLAGS) $(TARGET_LIBS) $(ADDONSLIBS) $(USER_LIBS) $(LIBS)
+
+-include $(DEPFILES)
+
+.PHONY: clean cleanDebug cleanRelease
+clean:
+ rm -Rf obj
+ rm -f -v $(TARGET)
+ rm -Rf -v bin/libs
+
+$(CLEANTARGET):
+ rm -Rf -v $(OBJ_OUTPUT)
+ rm -f -v $(TARGET)
+
+after:$(TARGET)
+ @echo Preparing MacOS .app
+ #-rm -rf -v $(TARGET).app
+ mkdir -p $(TARGET).app/Contents/Frameworks
+ mkdir -p $(TARGET).app/Contents/MacOS
+ cp -r $(OF_ROOT)/libs/glut/lib/osx/* $(TARGET).app/Contents/Frameworks/
+ cp -r $(OF_ROOT)/libs/fmodex/lib/osx/* $(TARGET).app/Contents/MacOS/
+ cp $(TARGET) $(TARGET).app/Contents/MacOS/
+ install_name_tool -change ./libfmodex.dylib @executable_path/libfmodex.dylib $(TARGET).app/Contents/MacOS/$(BIN_NAME)
+ @echo
+ @echo " compiling done"
+ @echo " to launch the application"
+ @echo
+ @echo " open $(TARGET).app"
+ @echo
+
+
+.PHONY: help
+help:
+ @echo
+ @echo openFrameworks universal makefile
+ @echo
+ @echo targets:
+ @echo "make Debug: builds the application with debug symbols"
+ @echo "make Release: builds the app with optimizations"
+ @echo "make: = make Release"
+ @echo "make all: = make Release"
+ @echo "make CleanDebug: cleans the Debug target"
+ @echo "make CleanRelease: cleans the Release target"
+ @echo "make clean: cleans everything"
+ @echo
+ @echo this should work with any OF app, just copy any example
+ @echo change the name of the folder and it should compile
+ @echo "only .cpp support, don't use .c files"
+ @echo it will look for files in any folder inside the application
+ @echo folder except that in the EXCLUDE_FROM_SOURCE variable.
+ @echo "it doesn't autodetect include paths yet"
+ @echo "add the include paths editing the var USER_CFLAGS"
+ @echo at the beginning of the makefile using the gcc syntax:
+ @echo -Ipath
+ @echo
+ @echo to add addons to your application, edit the addons.make file
+ @echo in this directory and add the names of the addons you want to
+ @echo include
+ @echo
diff --git a/04_playobjects/addons.make b/04_playobjects/addons.make
new file mode 100644
index 0000000..0b4df47
--- /dev/null
+++ b/04_playobjects/addons.make
@@ -0,0 +1,5 @@
+ofxOpenNI
+ofxFenster
+ofxGui
+ofxXmlSettings
+ofxMayaCam
diff --git a/04_playobjects/config.mak b/04_playobjects/config.mak
new file mode 100755
index 0000000..cb19ecf
--- /dev/null
+++ b/04_playobjects/config.mak
@@ -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 = ../../../../../
+
+
+# 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
+USER_LDFLAGS = -L bin/data/openni/lib -L ../../../data/openni/lib/libusb-1.0.0.dylib -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/04_playobjects/config.make b/04_playobjects/config.make
new file mode 100755
index 0000000..55dbb4e
--- /dev/null
+++ b/04_playobjects/config.make
@@ -0,0 +1,59 @@
+# 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
+# openNI doesn't like -std=c++11
+
+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
+
+CXX=colorgcc
+
+
+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/04_playobjects/src/main.cpp b/04_playobjects/src/main.cpp
new file mode 100644
index 0000000..f0d25bb
--- /dev/null
+++ b/04_playobjects/src/main.cpp
@@ -0,0 +1,17 @@
+
+#include "testApp.h"
+#include "ofMain.h"
+#include "ofAppGlutWindow.h"
+
+//========================================================================
+int main( ){
+
+ ofAppGlutWindow window;
+ ofSetupOpenGL(&window, 1200,800, 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 testApp());
+
+}
diff --git a/04_playobjects/src/testApp.cpp b/04_playobjects/src/testApp.cpp
new file mode 100644
index 0000000..5683e1f
--- /dev/null
+++ b/04_playobjects/src/testApp.cpp
@@ -0,0 +1,183 @@
+#include "testApp.h"
+
+//--------------------------------------------------------------
+void testApp::setup() {
+
+ ofSetLogLevel(OF_LOG_NOTICE);
+
+ verdana.loadFont(ofToDataPath("verdana.ttf"), 10);
+
+ playing=0;
+ numDevices=2;
+
+ string filename="test.xml"; //"TRSS_nesbitt_recordings.xml";
+
+ if( !XML.loadFile(filename) ){
+ printf("unable to load recordings, check data/ folder\n");
+ }else{
+ if(XML.pushTag("TRSS")) {
+ int num=XML.getNumTags("rec");
+ if(num) {
+ for (int i=0;i<num;i++) {
+ /*
+ syncOniPlayer p;
+ p.addPlayer(XML.getAttribute("rec","left","",i));
+ p.addPlayer(XML.getAttribute("rec","right","",i));
+ p.audio=XML.getAttribute("rec","audio","",i);
+ players.push_back(p);
+ */
+ players.push_back(syncOniPlayer());
+ players[i].addPlayer(XML.getAttribute("rec","left","",i));
+ players[i].addPlayer(XML.getAttribute("rec","right","",i));
+ players[i].audio=XML.getAttribute("rec","audio","",i);
+ }
+ }
+ else printf("no recordings found!\n");
+ }
+ }
+ /*
+ for (int deviceID = 0; deviceID < numDevices; deviceID++){
+
+ //openNIPlayers[deviceID].stop();
+ openNIPlayers[deviceID].setup(true);
+ openNIPlayers[deviceID].start();
+ //openNIPlayers[deviceID].startPlayer(ofToDataPath(recs[playing][deviceID]));
+ }
+ */
+ soundplayer.setLoop(false);
+ startPlayers(0);
+
+ //ofSetFrameRate(25.0f);
+ offset=0.0f;
+}
+
+void testApp::startPlayers(int newplayer){
+ players[playing].pause();
+ playing=newplayer;
+ players[playing].play();
+ //for (int deviceID = 0; deviceID < numDevices; deviceID++){
+ //openNIPlayers[deviceID].stop();
+ //openNIPlayers[deviceID].setup(true);
+ //openNIPlayers[deviceID].start();
+ //openNIPlayers[deviceID].startPlayer(ofToDataPath(recs[playing].data[deviceID]));
+
+ soundplayer.stop();
+
+ if (players[playing].audio!=""){
+ soundplayer.loadSound(players[playing].audio);
+ soundplayer.play();
+ //mmsoundplayer.setPositionMS(offset);
+ }
+ //}
+}
+
+//--------------------------------------------------------------
+void testApp::update(){
+ /*
+ for (int deviceID = 0; deviceID < numDevices; deviceID++){
+ openNIPlayers[deviceID].update();
+ }
+ */
+ players[playing].update();
+}
+
+//--------------------------------------------------------------
+void testApp::draw(){
+ ofBackground(0, 0, 0);
+ ofSetColor(255, 255, 255);
+
+ ofPushMatrix();
+
+ players[playing].draw();
+
+ /*
+ for (int deviceID = 0; deviceID < numDevices; deviceID++){
+ ofTranslate(0, deviceID * 400);
+ //openNIPlayers[deviceID].drawDebug();
+ openNIPlayers[deviceID].drawDepth(50, 0,520,390);
+ openNIPlayers[deviceID].drawImage(600, 0,520,390);
+ }
+ */
+
+ ofPopMatrix();
+
+ ofSetColor(255, 255, 255);
+ string msg = "MILLIS: " + ofToString(ofGetElapsedTimeMillis());
+ msg += "\nFPS: " + ofToString(ofGetFrameRate());
+ msg += "\noffset: "+ofToString(offset);
+ verdana.drawString(msg, 10, 10);
+}
+
+//--------------------------------------------------------------
+void testApp::exit(){
+
+}
+
+//--------------------------------------------------------------
+void testApp::keyPressed(int key){
+ int newplaying=playing;
+ switch (key) {
+ case ',':
+ newplaying=playing-1;
+ if (newplaying<0) newplaying=numDevices-1;
+ break;
+ case '.':
+ newplaying=(playing+1)%numDevices;
+ break;
+ case 'z':
+ offset-=1;
+ break;
+ case 'x':
+ offset+=1;
+ break;
+ }
+ if (newplaying!=playing) startPlayers(newplaying);
+
+ /* 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/04_playobjects/src/testApp.h b/04_playobjects/src/testApp.h
new file mode 100644
index 0000000..b541207
--- /dev/null
+++ b/04_playobjects/src/testApp.h
@@ -0,0 +1,106 @@
+#ifndef _TEST_APP
+#define _TEST_APP
+
+#include "ofxOpenNI.h"
+#include "ofMain.h"
+#include "ofxXmlSettings.h"
+
+#define MAX_DEVICES 2
+
+struct record{
+ vector<string> data;
+ string audio;
+};
+
+//in order to play diffferent clips it seems necessary to have a player per clip
+class syncOniPlayer{
+ public:
+ ~syncOniPlayer(){
+ for (int i=0;i<players.size();i++) {
+ players[i]->stop();
+ delete players[i];
+ }
+ }
+ void addPlayer(string name){
+ //ofxOpenNI *o=new ofxOpenNI;
+ //o->setupFromONI(name,true);
+ //o->setPaused(true);
+ //players.push_back(o);
+ players.push_back(new ofxOpenNI);
+ players[players.size()-1]->setupFromONI(name,true);
+ players[players.size()-1]->setPaused(true);
+ //players[players.size()-1]->setSpeed(0.0f);
+ //players[players.size()-1]->setup(true);
+ //players[players.size()-1]->start();
+ //players[players.size()-1]->startPlayer(name);
+ }
+ void play(){
+ for (int i=0;i<players.size();i++) {
+ players[i]->setPaused(false);
+ //players[players.size()-1]->setSpeed(1.0f);
+ }
+ }
+ void update(){
+ for (int i=0;i<players.size();i++) {
+ players[i]->update();
+ }
+ }
+ void pause(){
+ for (int i=0;i<players.size();i++) {
+ //players[players.size()-1]->setSpeed(0.0f);
+ players[i]->setPaused(true);
+ }
+ }
+ void draw(){
+ for (int i=0;i<players.size();i++) {
+ ofTranslate(0, i * 400);
+ players[i]->drawDepth(50, 0,520,390);
+ players[i]->drawImage(600, 0,520,390);
+ }
+ }
+ string audio;
+ private:
+ vector<ofxOpenNI*> players;
+
+};
+
+//however creating losts of ofxOpenNI doesn't seem viable
+//we know we want to play seperate clips
+//however we know that when we stop and start a player it comes back single threaded
+
+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);
+
+ void startPlayers(int which);
+
+ int numDevices;
+ ofxOpenNI openNIPlayers[MAX_DEVICES];
+
+ int playing;
+
+ ofTrueTypeFont verdana;
+
+ ofxXmlSettings XML;
+
+ vector<syncOniPlayer> players;
+
+ ofSoundPlayer soundplayer;
+
+ int offset;
+
+};
+
+#endif