view src/RecordedMultitrackAudio.cpp @ 2:179c09199b3c

bayesian vector now adding gaussians for kick onsets
author Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk>
date Tue, 31 Jan 2012 21:34:19 +0000
parents 852173ca8365
children 5e188c0035b6
line wrap: on
line source
/*
 *  RecordedMultitrackAudio.cpp
 *  MultipleAudioMathcher
 *
 *  Created by Andrew on 31/01/2012.
 *  Copyright 2012 QMUL. All rights reserved.
 *
 */

#include "RecordedMultitrackAudio.h"


void RecordedMultitrackAudio::loadTestAudio(){
	
	
	const char	*infilename = "../../../data/sound/basicClavScale.wav";	
	
	//LoadedAudioHolder lah;
	//	lah.loadAudioFile(infilename);
	//	loadedAudioFiles.push_back(lah);
	
	//Take care here - we need a pointer to create new instance
	//but not then delete the instance before the vector of all audio tracks has been used
	//the above code using lah has problem that it deletes objects once out of the scope of testApp.setup()
	//when lah is in theory no longer used - something like that possible? - at least pointers to onset detection seem deleted
	loadedAudioPtr = new LoadedAudioHolder();
	loadedAudioPtr->loadAudioFile(infilename);
	//	loadedAudioFiles.push_back(*loadedAudioPtr);
	loadedAudioFiles[0] = *loadedAudioPtr;
	
	loadedAudioFiles[0].fileLoader.onsetDetect.window.setToRelativeSize(0, 0.0, 1, 0.25);
	loadedAudioFiles[0].setTrackType(0);//	fileLoader.onsetDetect.trackType = 0;
	
	//	printf("Loaded audio %i\n", (int)numberOfAudioTracks);
	printf("loaded max val  is %f\n", loadedAudioFiles[0].fileLoader.onsetDetect.onsetDetector.maximumDetectionValue);
	
	printf("BEFORE LOADING 1\n");
	printInfo();
	
	infilename = "../../../data/sound/basicClavScale2.wav";	
	
	loadedAudioPtr = new LoadedAudioHolder;
	loadedAudioPtr->loadAudioFile(infilename);
	//	loadedAudioFiles.push_back(*loadedAudioPtr);
	loadedAudioFiles[1] = *loadedAudioPtr;
	loadedAudioFiles[1].fileLoader.onsetDetect.window.setToRelativeSize(0, 0.3, 1, 0.25);
	loadedAudioFiles[1].setTrackType(1);
//	loadedAudioFiles[1].fileLoader.onsetDetect.trackType = 0;
	
	printf("AFTER LOADING 1\n");
	printInfo();
	
	numberOfAudioTracks = 2;
	
	
}



void RecordedMultitrackAudio::drawTracks(){
	
	for (int i = 0;i < numberOfAudioTracks;i++){		
		loadedAudioFiles[i].draw();
	}
	
	ofDrawBitmapString("pitch "+ofToString(recentPitch, 2), 20, 20);
}


void RecordedMultitrackAudio::updatePosition(){
	for (int i = 0;i < numberOfAudioTracks;i++)
		loadedAudioFiles[i].updateToPlayPosition();
}


void RecordedMultitrackAudio::matchNewPitchEvent(const int& channel, const double& pitchIn, const double& timeIn){
	//start at beginning but OPTIMISE later
	
	if (channel <= numberOfAudioTracks){
		for (int i = 0;i < loadedAudioFiles[channel].fileLoader.onsetDetect.chromaOnsets.size();i++){
			
			if (checkMatch(loadedAudioFiles[channel].fileLoader.onsetDetect.chromaOnsets[i].aubioPitch, pitchIn)) {
				 loadedAudioFiles[channel].fileLoader.onsetDetect.chromaOnsets[i].matched = true;
			 } 
			 else{
				 loadedAudioFiles[channel].fileLoader.onsetDetect.chromaOnsets[i].matched = false;
			 }
			
		 }
	}
	
	recentPitch = pitchIn;
}

bool RecordedMultitrackAudio::checkMatch(const double& recordedPitch, const double& livePitch){
	if (abs(recordedPitch - livePitch) < 40)
		return true;
	else
		return false;
}


void RecordedMultitrackAudio::switchScreens(){
	for (int i = 0;i < numberOfAudioTracks;i++)
		loadedAudioFiles[i].switchScreens();
}


void RecordedMultitrackAudio::togglePlay(){
	for (int i = 0;i < numberOfAudioTracks;i++)
		loadedAudioFiles[i].togglePlay();
}

void RecordedMultitrackAudio::stop(){
	for (int i = 0;i < numberOfAudioTracks;i++)
		loadedAudioFiles[i].stop();
}


void RecordedMultitrackAudio::printInfo(){
	loadedAudioFiles[0].fileLoader.onsetDetect.printChromaInfo();
	loadedAudioFiles[0].printEvents();
}

void RecordedMultitrackAudio::windowResized(const int& w, const int& h){
	for (int i = 0;i < numberOfAudioTracks;i++)
		loadedAudioFiles[i].windowResized(w, h);
}

void RecordedMultitrackAudio::zoomIn(){
	for (int i = 0;i < numberOfAudioTracks;i++)
		loadedAudioFiles[i].fileLoader.zoomIn();
}

void RecordedMultitrackAudio::zoomOut(){
	for (int i = 0;i < numberOfAudioTracks;i++)
		loadedAudioFiles[i].fileLoader.zoomOut();
}