view ofxPreciseOnsetDetectorOffline/PreciseOnsetVisualiser.cpp @ 3:50f62c48b421

Small change
author Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk>
date Fri, 03 Jan 2014 17:43:02 +0000
parents 7ec1ed0b2eb0
children 93b9a9471011
line wrap: on
line source
/*
 *  PreciseOnsetVisualiser.cpp
 *  ofxPreciseOnsetDetectionOffline
 *
 *  Created by Andrew Robertson on 28/12/2013.
 *  Copyright 2013 QMUL. All rights reserved.
 *
 */

#include "PreciseOnsetVisualiser.h"

PreciseOnsetVisualiser::PreciseOnsetVisualiser(){

}

PreciseOnsetVisualiser::~PreciseOnsetVisualiser(){
	printf("deleting pointer in visualiser\n");
	delete pod;
	pod = NULL;
}

void PreciseOnsetVisualiser::newFile(){
	resetWindow();
	windowPress = 0;
	
	soundPlay.loadSound(pod->loadedFilename, false);
	paused = true;
	soundPlay.play();
	soundPlay.setPaused(true);
}

void PreciseOnsetVisualiser::update(){

}

void PreciseOnsetVisualiser::draw(){
	//if plotting use this, else comment out

	ofSetColor(ofColor::white);
	window.drawBackground();
	ofSetColor(ofColor::black);
	window.drawOutline();
	ofSetColor(ofColor::blue);
	plotter.drawBeatStripes(pod->onsetLocations, window, windowStart, windowEnd);
	
	ofSetColor(ofColor::red);
	plotter.drawStripe(positionSeconds(), window, windowStart, windowEnd);
	
}

double PreciseOnsetVisualiser::positionSeconds(){
	return soundPlay.getPosition()*pod->samples/44100.;
}

//void PreciseOnsetVisualiser::drawOnsets(DoubleVector& onsetTimesSeconds, ofxWindowregion& window, double startTime, double endTime){
//}

void PreciseOnsetVisualiser::resetWindow(){
	windowStart = 0;
	windowEnd = 8;
//	while (windowEnd < pod->samples/44100.)
//		windowEnd *= 2;
	
	windowEnd = pod->samples/44100.;
		
	printf("reset: start %.1f end %.1f\n", windowStart, windowEnd);
}

void PreciseOnsetVisualiser::cropStart(){
	if (soundPlay.getPositionMS()/1000. < windowEnd){
		windowStart = soundPlay.getPositionMS()/1000.;
		printf("s: start %.1f end %.1f\n", windowStart, windowEnd);
	}
}

void PreciseOnsetVisualiser::cropStartSeconds(double& val){
	if (val < windowEnd)
		windowStart = val;
}

void PreciseOnsetVisualiser::cropEnd(){//crops to play position
	
	if (soundPlay.getPositionMS()/1000. > windowStart){
		windowEnd = soundPlay.getPositionMS()/1000.;
		printf("crop end: start %.1f end %.1f\n", windowStart, windowEnd);
	}
}


void PreciseOnsetVisualiser::cropEndSeconds(double& val){
	if (val > windowStart)
		windowEnd = val;
	
	printf("crop end: start %.1f end %.1f\n", windowStart, windowEnd);
}


void PreciseOnsetVisualiser::mousePressed(int& x, int& y){
	if (window.tapped(x, y)){
		windowPress = windowStart + (windowEnd-windowStart)*(x - window.x)/window.width;
		double newPos = windowPress/(double)(pod->samples/44100.);
		printf("window position is %.1f new pos %f\n", windowPress, newPos);
		soundPlay.setPositionMS(windowPress*1000.0);
	}
}

void PreciseOnsetVisualiser::togglePlay(){
	if (!paused ){
		soundPlay.setPaused(true);
		paused = true;
		printf("was playing\n");
	}
	else {
		soundPlay.setPaused(false);//
		paused = false;
		printf("was not playing\n");
	}
}

void PreciseOnsetVisualiser::stop(){
	soundPlay.stop();
	//then get set to be played
	soundPlay.play();
	soundPlay.setPaused(true);
	soundPlay.setPositionMS(windowStart*1000.0);
	paused = true;
}