Skip to content

Commit

Permalink
Adding week 2 code.
Browse files Browse the repository at this point in the history
  • Loading branch information
mgs committed Sep 19, 2019
1 parent b037636 commit 3194c12
Show file tree
Hide file tree
Showing 5 changed files with 364 additions and 0 deletions.
5 changes: 5 additions & 0 deletions lm-week2/addons.make
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
ofxGui
ofxLiveApp
ofxMLTK
ofxSyphon
ofxTimeMeasurements
142 changes: 142 additions & 0 deletions lm-week2/config.make
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 =
13 changes: 13 additions & 0 deletions lm-week2/src/main.cpp
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());

}
154 changes: 154 additions & 0 deletions lm-week2/src/ofApp.cpp
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){

}
50 changes: 50 additions & 0 deletions lm-week2/src/ofApp.h
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);
};

0 comments on commit 3194c12

Please sign in to comment.