Mercurial > hg > precise-onset-detection
view ofxPreciseOnsetDetectorOffline/PreciseOnsetVisualiser.cpp @ 4:93b9a9471011
Changes to precise onset
author | Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk> |
---|---|
date | Mon, 06 Jan 2014 18:10:01 +0000 |
parents | 50f62c48b421 |
children | eb29c6b6dff8 |
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); } double PreciseOnsetVisualiser::windowWidth(){ return windowEnd - windowStart; } void PreciseOnsetVisualiser::update(){ double positionNow = positionSeconds(); if (positionNow > windowEnd){ double tmp = windowWidth(); windowEnd += tmp; windowStart += tmp; //printf("Scrolling\n"); } } void PreciseOnsetVisualiser::draw(){ //if plotting use this, else comment out ofSetColor(ofColor::white); window.drawBackground(); ofSetColor(ofColor::black); window.drawOutline(); //draw df function /* int startIndex = 0; while (startIndex < (int)pod->dfValues.size() && pod->frameIndexToSeconds(startIndex) < windowStart) startIndex++; int endIndex = 0; while (endIndex < (int)pod->dfValues.size()-1 && pod->frameIndexToSeconds(endIndex) < windowEnd) endIndex++; */ ofSetColor(ofColor::tan); // plotter.drawVector(pod->dfValues, startIndex, endIndex, window); plotter.drawVector(pod->dfValues, round(pod->secondsToFrameIndex(windowStart)), round(pod->secondsToFrameIndex(windowEnd)), window); ofSetColor(ofColor::black); ofDrawBitmapString(ofToString(round(pod->secondsToFrameIndex(windowStart)), 1), window.x, window.y-10); ofDrawBitmapString(ofToString(round(pod->secondsToFrameIndex(windowEnd)), 1), window.x+window.width, window.y-10); ofSetColor(ofColor::blue); plotter.drawBeatStripes(pod->onsetLocations, window, windowStart, windowEnd); //play position ofSetColor(ofColor::red); plotter.drawStripe(positionSeconds(), window, windowStart, windowEnd); ofSetColor(ofColor::black); ofDrawBitmapString(ofToString(windowStart, 1), window.x, window.y+window.height+10); ofDrawBitmapString(ofToString(windowEnd, 1), window.x+window.width, window.y+window.height+10); } 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; } void PreciseOnsetVisualiser::zoomIn(){ double positionNow = positionSeconds(); if (positionNow > windowEnd){ double tmp = windowWidth(); windowEnd += windowWidth(); windowStart += tmp; } windowStart = positionNow - (windowEnd-windowStart)/4; if (windowStart < 0) windowStart = 0; windowEnd = positionNow + (windowEnd-windowStart)/4; } void PreciseOnsetVisualiser::zoomOut(){ double positionNow = positionSeconds(); if (positionNow > windowEnd){ double tmp = windowWidth(); windowEnd += tmp; windowStart += tmp; } windowStart = positionNow - (windowEnd-windowStart); windowEnd = positionNow + (windowEnd-windowStart); if (windowStart < 0) windowStart = 0; } void PreciseOnsetVisualiser::scrollLeft(){ double tmp = windowWidth(); windowStart = max(0., windowStart - windowWidth()/2.); windowEnd = windowStart + tmp; checkPosition(); } void PreciseOnsetVisualiser::scrollRight(){ double tmp = windowWidth(); windowStart = min( windowStart+tmp/2., pod->samples/44100.); windowEnd = windowStart + tmp; checkPosition(); } void PreciseOnsetVisualiser::checkPosition(){ double positionNow = positionSeconds(); if (positionNow < windowStart || positionNow > windowEnd) soundPlay.setPositionMS(windowStart*1000); }