-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
364 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
ofxGui | ||
ofxLiveApp | ||
ofxMLTK | ||
ofxSyphon | ||
ofxTimeMeasurements |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,142 @@ | ||
################################################################################ | ||
# CONFIGURE PROJECT MAKEFILE (optional) | ||
# This file is where we make project specific configurations. | ||
################################################################################ | ||
|
||
################################################################################ | ||
# OF ROOT | ||
# The location of your root openFrameworks installation | ||
# (default) OF_ROOT = ../../.. | ||
################################################################################ | ||
# OF_ROOT = ../../.. | ||
|
||
################################################################################ | ||
# PROJECT ROOT | ||
# The location of the project - a starting place for searching for files | ||
# (default) PROJECT_ROOT = . (this directory) | ||
# | ||
################################################################################ | ||
# PROJECT_ROOT = . | ||
|
||
################################################################################ | ||
# PROJECT SPECIFIC CHECKS | ||
# This is a project defined section to create internal makefile flags to | ||
# conditionally enable or disable the addition of various features within | ||
# this makefile. For instance, if you want to make changes based on whether | ||
# GTK is installed, one might test that here and create a variable to check. | ||
################################################################################ | ||
# None | ||
|
||
################################################################################ | ||
# PROJECT EXTERNAL SOURCE PATHS | ||
# These are fully qualified paths that are not within the PROJECT_ROOT folder. | ||
# Like source folders in the PROJECT_ROOT, these paths are subject to | ||
# exlclusion via the PROJECT_EXLCUSIONS list. | ||
# | ||
# (default) PROJECT_EXTERNAL_SOURCE_PATHS = (blank) | ||
# | ||
# Note: Leave a leading space when adding list items with the += operator | ||
################################################################################ | ||
# PROJECT_EXTERNAL_SOURCE_PATHS = | ||
|
||
################################################################################ | ||
# PROJECT EXCLUSIONS | ||
# These makefiles assume that all folders in your current project directory | ||
# and any listed in the PROJECT_EXTERNAL_SOURCH_PATHS are are valid locations | ||
# to look for source code. The any folders or files that match any of the | ||
# items in the PROJECT_EXCLUSIONS list below will be ignored. | ||
# | ||
# Each item in the PROJECT_EXCLUSIONS list will be treated as a complete | ||
# string unless teh user adds a wildcard (%) operator to match subdirectories. | ||
# GNU make only allows one wildcard for matching. The second wildcard (%) is | ||
# treated literally. | ||
# | ||
# (default) PROJECT_EXCLUSIONS = (blank) | ||
# | ||
# Will automatically exclude the following: | ||
# | ||
# $(PROJECT_ROOT)/bin% | ||
# $(PROJECT_ROOT)/obj% | ||
# $(PROJECT_ROOT)/%.xcodeproj | ||
# | ||
# Note: Leave a leading space when adding list items with the += operator | ||
################################################################################ | ||
# PROJECT_EXCLUSIONS = | ||
|
||
################################################################################ | ||
# PROJECT LINKER FLAGS | ||
# These flags will be sent to the linker when compiling the executable. | ||
# | ||
# (default) PROJECT_LDFLAGS = -Wl,-rpath=./libs | ||
# | ||
# Note: Leave a leading space when adding list items with the += operator | ||
################################################################################ | ||
|
||
# Currently, shared libraries that are needed are copied to the | ||
# $(PROJECT_ROOT)/bin/libs directory. The following LDFLAGS tell the linker to | ||
# add a runtime path to search for those shared libraries, since they aren't | ||
# incorporated directly into the final executable application binary. | ||
# TODO: should this be a default setting? | ||
# PROJECT_LDFLAGS=-Wl,-rpath=./libs | ||
|
||
################################################################################ | ||
# PROJECT DEFINES | ||
# Create a space-delimited list of DEFINES. The list will be converted into | ||
# CFLAGS with the "-D" flag later in the makefile. | ||
# | ||
# (default) PROJECT_DEFINES = (blank) | ||
# | ||
# Note: Leave a leading space when adding list items with the += operator | ||
################################################################################ | ||
# PROJECT_DEFINES = | ||
|
||
################################################################################ | ||
# PROJECT CFLAGS | ||
# This is a list of fully qualified CFLAGS required when compiling for this | ||
# project. These CFLAGS will be used IN ADDITION TO the PLATFORM_CFLAGS | ||
# defined in your platform specific core configuration files. These flags are | ||
# presented to the compiler BEFORE the PROJECT_OPTIMIZATION_CFLAGS below. | ||
# | ||
# (default) PROJECT_CFLAGS = (blank) | ||
# | ||
# Note: Before adding PROJECT_CFLAGS, note that the PLATFORM_CFLAGS defined in | ||
# your platform specific configuration file will be applied by default and | ||
# further flags here may not be needed. | ||
# | ||
# Note: Leave a leading space when adding list items with the += operator | ||
################################################################################ | ||
# PROJECT_CFLAGS = | ||
|
||
################################################################################ | ||
# PROJECT OPTIMIZATION CFLAGS | ||
# These are lists of CFLAGS that are target-specific. While any flags could | ||
# be conditionally added, they are usually limited to optimization flags. | ||
# These flags are added BEFORE the PROJECT_CFLAGS. | ||
# | ||
# PROJECT_OPTIMIZATION_CFLAGS_RELEASE flags are only applied to RELEASE targets. | ||
# | ||
# (default) PROJECT_OPTIMIZATION_CFLAGS_RELEASE = (blank) | ||
# | ||
# PROJECT_OPTIMIZATION_CFLAGS_DEBUG flags are only applied to DEBUG targets. | ||
# | ||
# (default) PROJECT_OPTIMIZATION_CFLAGS_DEBUG = (blank) | ||
# | ||
# Note: Before adding PROJECT_OPTIMIZATION_CFLAGS, please note that the | ||
# PLATFORM_OPTIMIZATION_CFLAGS defined in your platform specific configuration | ||
# file will be applied by default and further optimization flags here may not | ||
# be needed. | ||
# | ||
# Note: Leave a leading space when adding list items with the += operator | ||
################################################################################ | ||
# PROJECT_OPTIMIZATION_CFLAGS_RELEASE = | ||
# PROJECT_OPTIMIZATION_CFLAGS_DEBUG = | ||
|
||
################################################################################ | ||
# PROJECT COMPILERS | ||
# Custom compilers can be set for CC and CXX | ||
# (default) PROJECT_CXX = (blank) | ||
# (default) PROJECT_CC = (blank) | ||
# Note: Leave a leading space when adding list items with the += operator | ||
################################################################################ | ||
# PROJECT_CXX = | ||
# PROJECT_CC = |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
#include "ofMain.h" | ||
#include "ofApp.h" | ||
|
||
//======================================================================== | ||
int main( ){ | ||
ofSetupOpenGL(1080, 1080, 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()); | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,154 @@ | ||
#include "ofApp.h" | ||
|
||
|
||
//-------------------------------------------------------------- | ||
void ofApp::setup(){ | ||
// clear any leftovers from the memory | ||
ofClear(ofColor::black); | ||
|
||
// VerticalSync helps to prevent tearing but locks the framerate at the screen | ||
// refresh rate. | ||
ofSetVerticalSync(false); | ||
ofSetFrameRate(60); | ||
ofSetBackgroundAuto(false); | ||
ofSetWindowTitle("Listening Machine - Week 2 - "); | ||
|
||
// setup the audio stream | ||
soundStream.setup(numberOfOutputChannels, numberOfInputChannels, sampleRate, frameSize, numberOfBuffers); | ||
|
||
|
||
mltk.setup(frameSize, sampleRate, frameSize/2); | ||
mltk.run(); | ||
|
||
// Let's make ourselves some GUI | ||
gui.setup("Press 'd' to toggle."); | ||
|
||
gui.add(showFps.set("Show Framerate In Title", true)); | ||
gui.add(graphColor.set("Graph Color", ofColor(240,240,255))); | ||
gui.add(coefsNoveltyFactor.set("MFCC Coefs Novelty Factor", 4.0, 0.0001, 8.0)); | ||
gui.add(bandsNoveltyFactor.set("MFCC Bands Novelty Factor", 1.0, 0.0001, 1.0)); | ||
} | ||
|
||
//-------------------------------------------------------------- | ||
void ofApp::update(){ | ||
// This will show us the framerate in the window's title bar | ||
if(showFps.get()){ | ||
ofSetWindowTitle("Listening Machine - Week 2 - " + to_string(ofGetFrameRate())); | ||
} | ||
|
||
// this runs the analysis chain that's been declared inside ofxMLTK | ||
mltk.run(); | ||
} | ||
|
||
//-------------------------------------------------------------- | ||
void ofApp::draw(){ | ||
ofBackground(0); | ||
|
||
Real rms = mltk.getValue("RMS"); | ||
vector<Real> mfcc_bands = mltk.getData("MFCC.bands"); | ||
vector<Real> mfcc_coefs = mltk.getData("MFCC.coefs"); | ||
vector<Real> spectrum = mltk.getData("Spectrum"); | ||
|
||
// We figure out the width of the buckets by just dividing the screen width | ||
// by the number of values in our frame | ||
float spectrumBucketWidth = (ofGetWidth() / float(spectrum.size())); | ||
float mfccBandWidth = (ofGetWidth() / float(mfcc_bands.size())); | ||
float mfccCoefsWidth = (ofGetWidth() / float(mfcc_coefs.size())); | ||
|
||
ofSetColor(graphColor.get()); | ||
|
||
if(showBands){ | ||
for(int i = 0; i < mfcc_bands.size(); i++){ | ||
ofDrawRectangle(i * mfccBandWidth, | ||
ofGetHeight(), | ||
mfccBandWidth, | ||
-ofMap(mfcc_bands[i]/rms, 0, 1.0, 0, ofGetHeight(), true)*bandsNoveltyFactor.get()); | ||
} | ||
} | ||
|
||
ofPolyline line; | ||
|
||
ofSetLineWidth(6); | ||
for(int i = 0; i < mfcc_coefs.size(); i++){ | ||
line.lineTo(i * mfccCoefsWidth, | ||
ofGetHeight()/2 + ((mfcc_coefs[i])*coefsNoveltyFactor.get())); | ||
} | ||
line.lineTo(ofGetWidth(), ofGetHeight()/2); | ||
if(showCoefs){ | ||
line.draw(); | ||
} | ||
|
||
if(showGui){ | ||
gui.draw(); | ||
} | ||
} | ||
|
||
|
||
//----- | ||
void ofApp::audioIn(ofSoundBuffer &inBuffer){ | ||
inBuffer.getChannel(mltk.leftAudioBuffer, 0); | ||
inBuffer.getChannel(mltk.rightAudioBuffer, 1); | ||
} | ||
|
||
//-------------------------------------------------------------- | ||
void ofApp::keyPressed(int key){ | ||
switch(key){ | ||
case 'd': | ||
showGui = !showGui; | ||
break; | ||
case 'b': | ||
showBands = !showBands; | ||
break; | ||
case 'c': | ||
showCoefs = !showCoefs; | ||
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::mouseEntered(int x, int y){ | ||
|
||
} | ||
|
||
//-------------------------------------------------------------- | ||
void ofApp::mouseExited(int x, int y){ | ||
|
||
} | ||
|
||
//-------------------------------------------------------------- | ||
void ofApp::windowResized(int w, int h){ | ||
|
||
} | ||
|
||
//-------------------------------------------------------------- | ||
void ofApp::gotMessage(ofMessage msg){ | ||
|
||
} | ||
|
||
//-------------------------------------------------------------- | ||
void ofApp::dragEvent(ofDragInfo dragInfo){ | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
#pragma once | ||
|
||
#include "ofMain.h" | ||
#include "ofxGui.h" | ||
#include "ofxMLTK.h" | ||
|
||
class ofApp : public ofBaseApp { | ||
public: | ||
bool showGui = true; | ||
bool showBands = true; | ||
bool showCoefs = true; | ||
|
||
int numberOfOutputChannels = 0; | ||
int numberOfInputChannels = 2; | ||
int sampleRate = 44100; | ||
int frameSize = 1024; | ||
int numberOfBuffers = 4; | ||
|
||
ofColor backgroundColor; | ||
ofMutex mutex; | ||
MLTK mltk; | ||
|
||
ofxPanel gui; | ||
|
||
ofParameter<bool> showFps; | ||
ofParameter<ofColor> graphColor; | ||
ofParameter<float> coefsNoveltyFactor; | ||
ofParameter<float> bandsNoveltyFactor; | ||
|
||
ofSoundStream soundStream; | ||
|
||
void audioIn(ofSoundBuffer &inBuffer); | ||
|
||
// These are the built-ins | ||
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 mouseEntered(int x, int y); | ||
void mouseExited(int x, int y); | ||
void windowResized(int w, int h); | ||
void dragEvent(ofDragInfo dragInfo); | ||
void gotMessage(ofMessage msg); | ||
}; |