summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-x[-rw-r--r--]bin/data/bw.xml2
-rwxr-xr-xsrc/main.cpp2
-rwxr-xr-xsrc/testApp.cpp128
-rwxr-xr-xsrc/testApp.h21
-rwxr-xr-xsrc/viewport.cpp44
-rwxr-xr-xsrc/viewport.h120
6 files changed, 249 insertions, 68 deletions
diff --git a/bin/data/bw.xml b/bin/data/bw.xml
index f8fd527..31792df 100644..100755
--- a/bin/data/bw.xml
+++ b/bin/data/bw.xml
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<palette name="b&w">
- <colour hex="FFFFFF"/>
+ <colour hex="ffffff"/>
<colour hex="000000"/>
</palette>
diff --git a/src/main.cpp b/src/main.cpp
index f0c0c0f..941033b 100755
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -7,7 +7,7 @@
int main( ){
ofAppGlutWindow window;
- ofSetupOpenGL(ofxFensterManager::get(),1024,768, OF_WINDOW); //2048,768
+ ofSetupOpenGL(ofxFensterManager::get(),128,64, OF_WINDOW); //2048,768
//ofSetupOpenGL(&window, 1024,768, OF_WINDOW); // <-------- setup the GL context
//ofSetupOpenGL(&window, 1024,768, OF_WINDOW);
diff --git a/src/testApp.cpp b/src/testApp.cpp
index c7bf35a..967d2d1 100755
--- a/src/testApp.cpp
+++ b/src/testApp.cpp
@@ -8,10 +8,11 @@ void previewWindow::setParent(testApp *p){
}
void previewWindow::draw(){
- for (auto i:parent->viewports) i.draw(parent->brightSlider);
+ for (auto i:parent->viewports) i.draw(parent->brightSlider,parent->previewscale);
}
void previewWindow::dragEvent(ofDragInfo dragInfo, ofxFenster* win){
+
parent->dragEvent(dragInfo);
}
//--------------------------------------------------------------
@@ -28,43 +29,57 @@ void guiWindow::draw(){
}
void guiWindow::dragEvent(ofDragInfo dragInfo, ofxFenster* win){
+ int sta=dragInfo.files[0].find_last_of("\\/")+1;
+ int len=(dragInfo.files[0].find_last_of(".")+4)-sta;
+ string filename=dragInfo.files[0].substr(sta,len);
+
+ if (filename.length()) {
+ palette p;
+ if (p.load(filename)) {
+ printf("loaded %s\n",filename.c_str());
+ for (int i=0;i<parent->viewports.size();i++) {
+ parent->viewports[i].Palette=p;
+ }
+ }
+ else printf("could not load %s\n",filename.c_str());
+ }
parent->dragEvent(dragInfo);
}
//--------------------------------------------------------------
void testApp::create1port(bool & pressed){
if (!pressed) return;
viewports.clear();
- viewports.push_back(viewport(4*windowsize,2*windowsize,0,0));
+ viewports.push_back(viewport(4*windowsize,2*windowsize,0,0,0));
createports(1);
}
void testApp::create2port(bool & pressed){
if (!pressed) return;
viewports.clear();
- viewports.push_back(viewport(2*windowsize,2*windowsize,0,0));
- viewports.push_back(viewport(2*windowsize,2*windowsize,2*windowsize,0));
+ viewports.push_back(viewport(2*windowsize,2*windowsize,0,0,0));
+ viewports.push_back(viewport(2*windowsize,2*windowsize,2*windowsize,0,1));
createports(2);
}
void testApp::create4port(bool & pressed){
if (!pressed) return;
viewports.clear();
- viewports.push_back(viewport(windowsize,2*windowsize,0,0));
- viewports.push_back(viewport(windowsize,2*windowsize,windowsize,0));
- viewports.push_back(viewport(windowsize,2*windowsize,2*windowsize,0));
- viewports.push_back(viewport(windowsize,2*windowsize,3*windowsize,0));
+ viewports.push_back(viewport(windowsize,2*windowsize,0,0,0));
+ viewports.push_back(viewport(windowsize,2*windowsize,windowsize,0,1));
+ viewports.push_back(viewport(windowsize,2*windowsize,2*windowsize,0,2));
+ viewports.push_back(viewport(windowsize,2*windowsize,3*windowsize,0,3));
createports(4);
}
void testApp::create8port(bool & pressed){
if (!pressed) return;
viewports.clear();
- viewports.push_back(viewport(windowsize,windowsize,0,0));
- viewports.push_back(viewport(windowsize,windowsize,(1*windowsize),0));
- viewports.push_back(viewport(windowsize,windowsize,(2*windowsize),0));
- viewports.push_back(viewport(windowsize,windowsize,(3*windowsize),0));
- viewports.push_back(viewport(windowsize,windowsize,0,windowsize));
- viewports.push_back(viewport(windowsize,windowsize,(1*windowsize),windowsize));
- viewports.push_back(viewport(windowsize,windowsize,(2*windowsize),windowsize));
- viewports.push_back(viewport(windowsize,windowsize,(3*windowsize),windowsize));
+ viewports.push_back(viewport(windowsize,windowsize,0,0,0));
+ viewports.push_back(viewport(windowsize,windowsize,(1*windowsize),0,1));
+ viewports.push_back(viewport(windowsize,windowsize,(2*windowsize),0,2));
+ viewports.push_back(viewport(windowsize,windowsize,(3*windowsize),0,3));
+ viewports.push_back(viewport(windowsize,windowsize,0,windowsize,4));
+ viewports.push_back(viewport(windowsize,windowsize,(1*windowsize),windowsize,5));
+ viewports.push_back(viewport(windowsize,windowsize,(2*windowsize),windowsize,6));
+ viewports.push_back(viewport(windowsize,windowsize,(3*windowsize),windowsize,7));
createports(8);
}
void testApp::createports(int num){
@@ -73,8 +88,8 @@ void testApp::createports(int num){
//--------------------------------------------------------------
void testApp::setup(){
- windowsize=100;
-
+ windowsize=32;
+ previewscale=5;
showFPS=false;
ofBackground(0,0,0);
@@ -83,7 +98,7 @@ void testApp::setup(){
//preview window stuff
prevWin=new previewWindow();
- win=ofxFensterManager::get()->createFenster(0, 0, windowsize*4, windowsize*2, OF_WINDOW);
+ win=ofxFensterManager::get()->createFenster(0, 0, windowsize*4*previewscale, windowsize*2*previewscale, OF_WINDOW);
ofAddListener(win->events.keyPressed, this, &testApp::keyPressedEvent);
win->setWindowTitle("preview");
win->addListener(prevWin);
@@ -107,10 +122,13 @@ void testApp::setup(){
gui.add(create_8.setup("8"));
create_8.addListener(this,&testApp::create8port);
- gui.add(fillgrey.setup("fill grey", false));
- greyFreq=1.0f;
- gui.add(gF.setup("grey freq",greyFreq,0,2.0,255));
+ gui.add(fill.setup("fill", false));
+ slidFreq=1.0f;
+ gui.add(sF.setup("freq",slidFreq,0,1.0,255));
+ gui.add(wave.setup("wave", false));
+ slidThickness=1.0f;
+ gui.add(sT.setup("thickness",slidThickness,0,10.0,255));
/*
gui.setup("","panel.xml",0,0);
@@ -145,23 +163,66 @@ void testApp::setup(){
guiWin->setup();
guiWin->setParent(this);
+
+ 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.
+
+
+
+
+ soundStream.setup(this, 0, 2, 44100, bufferSize, 4);
}
+//--------------------------------------------------------------
+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++){
+ control.left[i] = input[i*2]*0.5;
+ control.right[i] = input[i*2+1]*0.5;
+
+ curVol += control.left[i] * control.left[i];
+ curVol += control.right[i] * control.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 );
+
+ control.smoothedVol *= 0.93;
+ control.smoothedVol += 0.07 * curVol;
+
+ control.bufferCounter++;
+
+}
+
//--------------------------------------------------------------
void testApp::update(){
- //for (int i=0;i<numLayers;i++) layers[i]->update();
+ control.update();
+ control.fill=fill;
+ control.freq=slidFreq;
+ control.wave=wave;
+ control.thickness=slidThickness;
}
//--------------------------------------------------------------
void testApp::draw(){
- control.fillgrey=fillgrey;
- control.fillgreyfreq=greyFreq;
for (auto i:viewports) i.drawport(control);
@@ -189,6 +250,12 @@ void testApp::keyPressed(int key){
if(key == 'f'){
toggleFPS();
}
+ if(key == OF_KEY_UP){
+ control.yshift--;
+ }
+ if(key == OF_KEY_DOWN){
+ control.yshift++;
+ }
}
@@ -227,19 +294,16 @@ void testApp::gotMessage(ofMessage msg){
//--------------------------------------------------------------
void testApp::dragEvent(ofDragInfo dragInfo, ofxFenster* win){
+
+
dragEvent(dragInfo);
}
void testApp::dragEvent(ofDragInfo dragInfo){
- printf("got draginfo: %s\n",dragInfo.files[0].c_str());
- int sta=dragInfo.files[0].find_last_of("\\/")+1;
- int len=(dragInfo.files[0].find_last_of(".")+4)-sta;
- string filename=dragInfo.files[0].substr(sta,len);
- printf("loading %s\n",filename.c_str());
-
- if (filename.length()) control.loadpalette(filename);
+
}
+
void testApp::mousePressedEvent(ofMouseEventArgs &args) {
//printf("mouse: %i,%i %i of %ix%i\n",args.x,args.y,args.button,win->getWidth(),win->getHeight());
//0-2
diff --git a/src/testApp.h b/src/testApp.h
index 376cdee..3148eb2 100755
--- a/src/testApp.h
+++ b/src/testApp.h
@@ -63,10 +63,16 @@ class testApp : public ofxFensterListener {
ofxIntSlider bS;
ofxParameter<int> brightSlider;
- ofxToggle fillgrey;
+ ofxToggle fill;
+
+ ofxFloatSlider sF;
+ ofxParameter<float> slidFreq;
+
+ ofxToggle wave;
+
+ ofxFloatSlider sT;
+ ofxParameter<float> slidThickness;
- ofxFloatSlider gF;
- ofxParameter<float> greyFreq;
void create1port(bool & pressed);
void create2port(bool & pressed);
@@ -76,11 +82,14 @@ class testApp : public ofxFensterListener {
vector<viewport> viewports;
vpcontrol control;
- int windowsize;
+ int windowsize,previewscale;
- vector<ofColor> palette;
+ //
- void loadfilepalette(string &palette);
+ void audioIn(float * input, int bufferSize, int nChannels);
+
+
+ ofSoundStream soundStream;
};
diff --git a/src/viewport.cpp b/src/viewport.cpp
index 875b439..c660ede 100755
--- a/src/viewport.cpp
+++ b/src/viewport.cpp
@@ -1,18 +1,21 @@
#include "viewport.h"
+//make viewport oversample
+
viewport::viewport()
{
//ctor
}
-viewport::viewport(int _w,int _h,int _ox,int _oy) {
- setup(_w,_h,_ox,_oy);
+viewport::viewport(int _w,int _h,int _ox,int _oy,int _num) {
+ setup(_w,_h,_ox,_oy,_num);
}
-void viewport::setup(int _w,int _h,int _ox,int _oy) {
+void viewport::setup(int _w,int _h,int _ox,int _oy,int _num) {
w=_w;
h=_h;
ox=_ox;
oy=_oy;
+ num=_num;
rb1.allocate(w,h,GL_RGB);
rb2.allocate(w,h,GL_RGB);
seed=ofRandom(1.0f);
@@ -37,11 +40,38 @@ void viewport::drawport(vpcontrol &control){
//do whatever with feedback
- if (control.fillgrey){
- uint8_t f=(uint8_t)((sin((ofGetElapsedTimef()*control.fillgreyfreq)/seed)+1.0f)*127.50f);
+ //set draw colour from palette
+
+ if (Palette.isLoaded()){
+ ofSetColor(Palette.getBlend((ofGetElapsedTimef()*control.freq*0.0318)/seed));
+ }
+ else {
+ uint8_t f=(uint8_t)((sin((ofGetElapsedTimef()*control.freq)/seed)+1.0f)*127.50f);
ofSetColor(f,f,f);
+ }
+
+ if (control.fill){
ofRect(0,0,w,h);
}
+
+ ofSetLineWidth(3); //control.thickness);
+
+ if(control.wave){
+ if (h>w){
+ ofBeginShape();
+ for (int i = 0; i < h; i++){
+ ofVertex((w/2) -(control.right[i+(num*h)]*w),i);
+ }
+ ofEndShape(false);
+ }
+ else {
+ ofBeginShape();
+ for (int i = 0; i < w; i++){
+ ofVertex(i, (h/2) -(control.right[i+(num*w)]*h) );
+ }
+ ofEndShape(false);
+ }
+ }
rb1.end();
@@ -52,10 +82,10 @@ void viewport::drawport(vpcontrol &control){
rb2.end();
}
-void viewport::draw(uint8_t b){
+void viewport::draw(uint8_t b,float s){
ofSetColor(b,b,b);
- rb2.draw(ox,oy);
+ rb2.draw(ox*s,oy*s,w*s,h*s);
}
diff --git a/src/viewport.h b/src/viewport.h
index 7ab1477..b786fe9 100755
--- a/src/viewport.h
+++ b/src/viewport.h
@@ -4,51 +4,129 @@
#include "ofMain.h"
#include "ofxXmlSettings.h"
-class vpcontrol {
+static int bufferSize = 1024;
+static int bufferscale = 4;
+
+class palette {
public:
- vpcontrol(){
- fillgrey=false;
- fillgreyfreq=1.0f;
- xshift=0;
- yshift=0;
- fscale=1.0f;
- }
- void loadpalette(string &filename){
+ bool load(string &filename){
ofxXmlSettings XML;
if( !XML.loadFile(filename) ){
printf("unable to load palette file\n");
}else{
- palette.clear();
- palettename=XML.getAttribute("palette","name","",0);
+ colours.clear();
+ name=XML.getAttribute("palette","name","",0);
if(XML.pushTag("palette")) {
int numCols=XML.getNumTags("colour");
- for (int i=0;i<numCols;i++) {
- palette.push_back(ofColor.fromHex(ofFromHex(XML.getAttribute("colour","hex",0x00,0))));
+ if (numCols){
+ for (int i=0;i<numCols;i++) {
+ ofColor c;
+ c.setHex(ofHexToInt(XML.getAttribute("colour","hex","000000",i)));
+ colours.push_back(c);
+ }
+ return true;
}
}
+
+ }
+ return false;
+ }
+ void randomise(){
+ colours.clear();
+ for (int i=0;i<ofRandom(10);i++){
+ colours.push_back(ofColor(ofRandom(255),ofRandom(255),ofRandom(255)));
+ }
+ }
+ int size(){
+ return colours.size();
+ }
+ bool isLoaded(){
+ return colours.size()>0;
+ }
+ ofColor getBlend(float phase){
+ if (colours.size()){
+ float scaled=fmod(phase,1.0f)*colours.size();
+ int first=(int)scaled;
+ int second=(first+1)%colours.size();
+ float frac=scaled-first;
+ return colours[first].getLerped(colours[second],frac);
+ }
+ else return ofColor(0,0,0);
+ }
+ void print(){
+ cerr<<"printing palette: "<<size()<<" colours"<<endl;
+ for (auto c:colours) cerr<<((int)c.r)<<" "<<((int)c.g)<<" "<<((int)c.b)<<endl;
+ }
+ vector<ofColor> colours;
+ string name;
+
+};
+
+class vpcontrol {
+ public:
+ vpcontrol(){
+ fill=false;
+ freq=1.0f;
+ xshift=0;
+ yshift=0;
+ fscale=1.0f;
+ wave=false;
+ thickness=1.0f;
+
+ 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;
+ }
+ void 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);
}
+
}
- bool fillgrey;
- float fillgreyfreq;
+ bool fill;
+ float freq;
int xshift,yshift;
float fscale,scale;
- vector<ofColor> palette;
- string palettename;
+ bool wave;
+ float thickness;
+
+ vector <float> left;
+ vector <float> right;
+ vector <float> volHistory;
+
+ int bufferCounter;
+ int drawCounter;
+
+ float smoothedVol;
+ float scaledVol;
};
class viewport
{
public:
viewport();
- viewport(int _w,int _h,int _ox,int _oy);
+ viewport(int _w,int _h,int _ox,int _oy,int _num);
virtual ~viewport();
- void setup(int _w,int _h,int _ox,int _oy);
+ void setup(int _w,int _h,int _ox,int _oy,int _num);
void drawport(vpcontrol &control);
- void draw(uint8_t brightness);
+ void draw(uint8_t brightness,float scale=1.0f);
ofFbo rb1,rb2;
+ palette Palette;
protected:
private:
- int x,y,w,h,ox,oy;
+ int x,y,w,h,ox,oy,num;
float seed;
};