Mercurial > hg > multitrack-audio-matcher
view src/AccompanimentSynchroniser.cpp @ 16:680ba08e9925
Auto synchroniser added using the elastique~ object in max
author | Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk> |
---|---|
date | Mon, 06 Feb 2012 12:18:40 +0000 |
parents | |
children | c96b18dd0f48 |
line wrap: on
line source
/* * AccompanimentSynchroniser.cpp * MultipleAudioMathcher * * Created by Andrew on 06/02/2012. * Copyright 2012 QMUL. All rights reserved. * */ #include "AccompanimentSynchroniser.h" AccompanimentSynchroniser::AccompanimentSynchroniser(){ sender.setup(HOST, SENDER_PORT); } void AccompanimentSynchroniser::setPlayingRatio(const double& ratio, const double& timePlayed){ playingPositionRatio = ratio; playingPositionSamples = ratio * fileLengthSamples; playingPositionMillis = playingPositionSamples * 1000.0/44100.0; playingPositionTimeSent = timePlayed; } void AccompanimentSynchroniser::updateRecordedPosition(const double& currentAlignmentPosition){ recordedPositionMillis = currentAlignmentPosition; } void AccompanimentSynchroniser::updateOutputSpeed(){ //we want the playing position to more closely align with the recordedPosition double difference = recordedPositionMillis - playingPositionMillis; //suppose we project that we will align in two seconds time double projectedAlignmentTime = 2000; //then our current speed projects forward double predictedPlayingTimeIncrease = projectedAlignmentTime*speed; difference += (projectedAlignmentTime - predictedPlayingTimeIncrease); speed += difference/projectedAlignmentTime; sendSpeed(speed); } void AccompanimentSynchroniser::sendSpeed(double const& val){ ofxOscMessage m; m.setAddress( "/setSpeed" ); m.addFloatArg( val ); sender.sendMessage( m ); }