From 23879cc5bf88de215f10de14f1a3de9b6b2f586a Mon Sep 17 00:00:00 2001 From: Tim Redfern Date: Thu, 31 May 2018 18:18:28 +0100 Subject: fixed rounding bug --- gui/src/main.cpp | 2 +- gui/src/ofApp.cpp | 304 +++++++++++++++++++++++++++++++++++++++++++++++------- gui/src/ofApp.h | 85 +++++++++++++-- 3 files changed, 339 insertions(+), 52 deletions(-) (limited to 'gui/src') diff --git a/gui/src/main.cpp b/gui/src/main.cpp index 763fb73..1221d37 100644 --- a/gui/src/main.cpp +++ b/gui/src/main.cpp @@ -21,7 +21,7 @@ int main(int argc, char *argv[]){ mainWindow->setVerticalSync(false); settings.width = 600; - settings.height = 900; + settings.height = 1000; settings.setPosition(ofVec2f(0,0)); settings.resizable = true; diff --git a/gui/src/ofApp.cpp b/gui/src/ofApp.cpp index 14e669d..e684254 100644 --- a/gui/src/ofApp.cpp +++ b/gui/src/ofApp.cpp @@ -5,13 +5,20 @@ const ofPoint outputWindowSize=ofPoint(1200,900); const float guiScale=560.0f/4096.0f; +string sourcenames[5]={ + "TEST", +// "NDI", + "Player", + "SVG outlines", + "SVG segmenters", + "Audio" +}; + //-------------------------------------------------------------- void ofApp::setup(){ - gui.setup(); - - source=SVG_outlines; - + source=Audio; +/* //==================================================== ofxNDI senderName[0] = 0; // The sender name used for display @@ -26,33 +33,74 @@ void ofApp::setup(){ // For received frame fps calculations - independent of the rendering rate startTime = lastTime = frameTime = 0; fps = frameRate = 1; // starting value - - //============================ GUI - - gui.add(contour_threshold.setup("threshold", 140, 0, 255)); - gui.add(contour_simplify.setup("simplify", 0.8, 0.0, 1.0)); - gui.add(contour_useColour.setup("use colour", true)); - gui.add(laser_R.setup("red", 140, 0, 255)); - gui.add(laser_G.setup("green", 140, 0, 255)); - gui.add(laser_B.setup("blue", 140, 0, 255)); - gui.add(laser_intensity.setup("intensity", 30, 0, 255)); - gui.add(laser_points.setup("points", 20000, 0, 40000)); - gui.add(video_speed.setup("playback speed", 1.0, 0.0, 3.0)); - gui.add(shapes_randomise.setup("randomise shapes", true)); - gui.add(shapes_amount.setup("shapes amount", 0.2, 0.0, 0.8)); - gui.add(shapes_duration.setup("shape duration", 5, 0, 25)); - gui.add(use_mask.setup("use mask", true)); - gui.add(invert_mask.setup("invert mask", false)); - gui.add(use_segmenter.setup("use segmenter", false)); - gui.add(segmenter_speed.setup("segmenter speed", 0.2, -1.0, 1.0)); - gui.add(segmenter_length.setup("segmenter length", 0.2, 0.0, 1.0)); - gui.add(segmenter_number.setup("segmenter number", 1, 1, 8)); - gui.add(use_rotate.setup("XF rotate", false)); - gui.add(xf_rotate.setup("rotate speed", 0.0, -1.0, 1.0)); - gui.add(use_scale.setup("XF scale", false)); - gui.add(xf_scale_speed.setup("scale speed", 1.0, 0.0, 10.0)); - gui.add(xf_scale_min.setup("scale min", 1.0, 0.0, 3.0)); - gui.add(xf_scale_max.setup("scale max", 2.0, 0.0, 3.0)); +*/ + + //============================= Audio + + plotter.setup(5,true); + + bufferSize = 2048; + sampleRate = 44100; + + gist.setUseForOnsetDetection(GIST_PEAK_ENERGY); + gist.setThreshold(GIST_PEAK_ENERGY, .05);// + + ofAddListener(GistEvent::ON,this,&ofApp::onNoteOn); + ofAddListener(GistEvent::OFF,this,&ofApp::onNoteOff); + + // ofAddListener(ofApp::useMic->Value,this,&ofApp::useMicChanged); + + soundStream.setup(this,0, 1, sampleRate, bufferSize, 1); + + //loadSong("12 Ferric Appetite.aiff"); + loadSong("passades/1 The Ninth Set-sector1:sector2pt.1.aiff"); + + //============================ gui + + lasergui.setup("laser"); + lasergui.add(laser_power.set("power", false)); + lasergui.add(laser_intensity.set("intensity", 30, 0, 255)); + lasergui.add(laser_points.set("points", 30000, 0, 40000)); + lasergui.add(laser_subdivide.set("subdivide", 15, 1, 100)); + lasergui.add(laser_blank_num.set("blank points", 8, 0, 32)); + lasergui.add(laser_max_angle.set("max angle", 15.0f, 1.0f, 90.0f)); + + drawgui.setup("drawing","",10,150); + drawgui.add(contour_threshold.setup("threshold", 140, 0, 255)); + drawgui.add(contour_simplify.setup("simplify", 0.8, 0.0, 1.0)); + drawgui.add(contour_useColour.setup("use colour", true)); + drawgui.add(laser_R.setup("red", 140, 0, 255)); + drawgui.add(laser_G.setup("green", 140, 0, 255)); + drawgui.add(laser_B.setup("blue", 140, 0, 255)); + drawgui.add(video_speed.setup("playback speed", 1.0, 0.0, 3.0)); + drawgui.add(shapes_randomise.setup("randomise shapes", true)); + drawgui.add(shapes_amount.setup("shapes amount", 0.2, 0.0, 0.8)); + drawgui.add(shapes_duration.setup("shape duration", 5, 0, 25)); + drawgui.add(use_mask.setup("use mask", true)); + drawgui.add(invert_mask.setup("invert mask", false)); + drawgui.add(use_segmenter.setup("use segmenter", false)); + drawgui.add(segmenter_speed.setup("segmenter speed", 0.2, -1.0, 1.0)); + drawgui.add(segmenter_length.setup("segmenter length", 0.2, 0.0, 1.0)); + drawgui.add(segmenter_number.setup("segmenter number", 1, 1, 8)); + drawgui.add(use_rotate.setup("XF rotate", false)); + drawgui.add(xf_rotate.setup("rotate speed", 0.0, -1.0, 1.0)); + drawgui.add(use_scale.setup("XF scale", false)); + drawgui.add(xf_scale_speed.setup("scale speed", 1.0, 0.0, 10.0)); + drawgui.add(xf_scale_min.setup("scale min", 1.0, 0.0, 3.0)); + drawgui.add(xf_scale_max.setup("scale max", 2.0, 0.0, 3.0)); + + audiogui.setup("audio","",10,600); + audiogui.add(useMic.set("mic",true)); + audiogui.add(useFft.set("fft",false)); + audiogui.add(scalePlot.set("scale plot", 0.1f, 0.0f, 1.0f )); + audiogui.add(decayPlot.set("decay", 0.9f, 0.0f, 1.0f )); + audiogui.add(plotter.joined.set("joined",true)); + audiogui.add(plotter.bars.set("bars",true)); + audiogui.add(plotter.width.set("point width", 2, 1, 256)); + audiogui.add(plotter.num_points.set("num points", 50, 1, 512)); + audiogui.add(plotter.history_size.set("num plots", 5, 1, 100)); + audiogui.add(plotter.startColour.set("start",ofColor(255,255,255))); + audiogui.add(plotter.endColour.set("end",ofColor(0,0,0))); framecounter=0; @@ -110,6 +158,109 @@ void ofApp::setup(){ } +//====================== audio functions + +void ofApp::loadSong(string str){ + + cout<<"loadSong "<max){ + max=centre[i]; + } + } + + + } + else if (nChannels==1){ + for (int i = 0; i < bufferSize;i++){ + left[i] = input[i]; + right[i] = input[i]; + centre[i] = input[i]; + if (centre[i]>max){ + max=centre[i]; + } + } + } + + //ofLog()<<"audio data max "<buffer; + buffer.assign(&input[0],&input[bufferSize]); + + gist.processAudio(buffer, bufferSize, nChannels,sampleRate); +} + + +void ofApp::audioIn(float * input, int bufferSize, int nChannels){ + if(!useMic){ + return; + } + + //ofLog() << "processing "< output = player.getCurrentBuffer(bufferSize); + processAudio(&output[0], bufferSize, 2); + // + if (useFft){ + fftSmoothed = player.getFFT(); + /* + float * fft = ofSoundGetSpectrum(plotter.num_points); + fftSmoothed.resize(plotter.num_points); + //printf("fft: "); + for (int i=0;i transformedOutput; @@ -618,7 +840,9 @@ void ofApp::drawOutput(ofEventArgs & args){ int pnum=0; if (polyOutput.size()){ - num=laser.draw(scaledWarpedOutput); + if (laser_power) { + num=laser.draw(scaledWarpedOutput); + } for (auto& shape:warpedOutput){ shape.draw(); pnum+=shape.size(); @@ -630,11 +854,11 @@ void ofApp::drawOutput(ofEventArgs & args){ } if (num>0){ - ofSetWindowTitle(ofToString(ofGetFrameRate(), 2)+" fps laser points: "+ofToString(num)); + ofSetWindowTitle(sourcenames[source]+": "+ofToString(ofGetFrameRate(), 2)+" fps laser points: "+ofToString(num)); } else { - ofSetWindowTitle(ofToString(ofGetFrameRate(), 2)+" fps laser error points: "+ofToString(pnum)); + ofSetWindowTitle(sourcenames[source]+": "+ofToString(ofGetFrameRate(), 2)+" fps laser error points: "+ofToString(pnum)); } } @@ -679,8 +903,8 @@ void ofApp::keyPressed(ofKeyEventArgs &args){ bDrawFrame=!bDrawFrame; break; } - case OF_KEY_COMMAND:{ - commandPressed=true; + case 'd':{ + default_settings(); break; } case 's':{ diff --git a/gui/src/ofApp.h b/gui/src/ofApp.h index 33c855a..c9b1c4f 100644 --- a/gui/src/ofApp.h +++ b/gui/src/ofApp.h @@ -1,26 +1,42 @@ #pragma once #include "ofMain.h" -#include "lineTransformer.h" -#include "ofxNDI.h" + +//#include "ofxNDI.h" #include "ofxGui.h" -#include "ofxHelios.h" +#include "ofxXmlSettings.h" #include "ofxOpenCv.h" #include "ofxSVG.h" -#include "lineSegmenter.h" -#include "ofxXmlSettings.h" #include "ofxClipper.h" #include "ofxMidi.h" +#include "ofxHelios.h" +#include "lineTransformer.h" +#include "lineSegmenter.h" + +#include "ofxGist.h" +//This is included only as a way of getting buffer out of loaded sound. +//There are many other ways you can do that. +//This player includes a version of kissFFT. You can remove the one included in Gist. +//https://github.com/borg/ofxOpenALSoundPlayer +#include "ofxOpenALSoundPlayer.h" +//Slightly modified to add a dynamic getVariable method to be able to plot based on +//gist feature list +//https://github.com/local-projects/ofxHistoryPlot +#include "ofxHistoryPlot.h" +#include "Audioplotter.h" + enum Source{ TEST, - NDI, +// NDI, Player, SVG_outlines, SVG_segmenters, + Audio, Source_end }; + class ofApp: public ofBaseApp, public ofxMidiListener { public: @@ -52,6 +68,8 @@ class ofApp: public ofBaseApp, public ofxMidiListener { void outputWindowResized(ofResizeEventArgs &resizeargs); void select_random_shapes(); + + void default_settings(); void save_settings(); bool commandPressed; @@ -60,12 +78,46 @@ class ofApp: public ofBaseApp, public ofxMidiListener { int select_warpframe; bool bDrawFrame; - ofxPanel gui; ofxHelios laser; int source; + //======================================== //audio + + ofxGist gist; + void onNoteOn(GistEvent &e); + void onNoteOff(GistEvent &e); + + ofSoundStream soundStream; + ofxOpenALSoundPlayer player; + + void processAudio(float * input, int bufferSize, int nChannels); + void audioIn(float * input, int bufferSize, int nChannels); + + void loadSong(string str); + + int bufferSize; + int sampleRate; + + vectorfftSmoothed; + vector left; + vector right; + vector centre; + + Audioplotter plotter; + + //======== audio gui + + ofxPanel audiogui; + ofParameter useMic; + ofParameter useFft; + ofParameter scalePlot; + ofParameter decayPlot; + + void useMicChanged(); + + //======================================== //thresholding ofxCvColorImage colorImg; @@ -73,7 +125,7 @@ class ofApp: public ofBaseApp, public ofxMidiListener { ofxCvContourFinder contourFinder; //======================================== //ofxNDI - +/* ofxNDIreceiver ndiReceiver; ofImage ndiImage; char senderName[256]; @@ -84,8 +136,10 @@ class ofApp: public ofBaseApp, public ofxMidiListener { // For received frame fps calculations double startTime, lastTime, frameTime, frameRate, fps; +*/ + //====== drawing gui - //====== gui + ofxPanel drawgui; ofxIntSlider contour_threshold; ofxFloatSlider contour_simplify; @@ -93,8 +147,6 @@ class ofApp: public ofBaseApp, public ofxMidiListener { ofxIntSlider laser_R; ofxIntSlider laser_G; ofxIntSlider laser_B; - ofxIntSlider laser_intensity; - ofxIntSlider laser_points; //====== video @@ -121,6 +173,17 @@ class ofApp: public ofBaseApp, public ofxMidiListener { ofxFloatSlider xf_scale_min; ofxFloatSlider xf_scale_max; + + //======= laser gui + + ofxPanel lasergui; + ofParameter laser_power; + ofParameter laser_intensity; + ofParameter laser_points; + ofParameter laser_subdivide; + ofParameter laser_blank_num; + ofParameter laser_max_angle; + //======================================= //MIDI ofxMidiIn midiIn; -- cgit v1.2.3