annotate src/AudioEventMatcher.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
rev   line source
andrew@0 1 /*
andrew@0 2 * AudioEventMatcher.cpp
andrew@0 3 * MultipleAudioMathcher
andrew@0 4 *
andrew@0 5 * Created by Andrew on 31/01/2012.
andrew@0 6 * Copyright 2012 QMUL. All rights reserved.
andrew@0 7 *
andrew@0 8 */
andrew@0 9
andrew@0 10 #include "AudioEventMatcher.h"
andrew@0 11
andrew@0 12
andrew@2 13 const int matchWindowWidth = 6000;
andrew@0 14
andrew@0 15 AudioEventMatcher::AudioEventMatcher(){
andrew@0 16
andrew@0 17 bayesTempoWindow.setToRelativeSize(0, 0.6, 1, 0.2);
andrew@0 18 bayesPositionWindow.setToRelativeSize(0, 0.8, 1, 0.2);
andrew@0 19
andrew@0 20 setArraySizes();
andrew@0 21 }
andrew@0 22
andrew@0 23
andrew@0 24 void AudioEventMatcher::setArraySizes(){
andrew@0 25 bayesianStruct.resetSpeedSize(200);
andrew@0 26 bayesianStruct.setRelativeSpeedScalar(0.01);
andrew@0 27 bayesianStruct.setSpeedPrior(1.0);
andrew@0 28 bayesianStruct.relativeSpeedPrior.getMaximum();
andrew@0 29
andrew@0 30 bayesianStruct.resetSize(matchWindowWidth);
andrew@0 31 bayesianStruct.setPositionDistributionScalar(1);
andrew@0 32
andrew@0 33 }
andrew@0 34
andrew@0 35 void AudioEventMatcher::draw(){
andrew@0 36 //ofRect(20, 20, 300, 200);
andrew@0 37
andrew@1 38 recordedTracks.drawTracks();
andrew@2 39
andrew@2 40 ofSetColor(255);
andrew@2 41 // bayesianStruct.relativeSpeedPrior.drawVector(0, 200, bayesTempoWindow);
andrew@2 42
andrew@2 43 double screenWidthMillis = recordedTracks.loadedAudioFiles[0].fileLoader.onsetDetect.framesToMillis(recordedTracks.loadedAudioFiles[0].fileLoader.onsetDetect.amplitudeNumber);
andrew@2 44
andrew@2 45
andrew@2 46 bayesianStruct.likelihood.drawVector(0, screenWidthMillis, bayesTempoWindow);
andrew@0 47
andrew@1 48 }
andrew@1 49
andrew@1 50
andrew@1 51 void AudioEventMatcher::newPitchEvent(const double& pitchIn, const double& timeIn){
andrew@1 52 liveInput.addPitchEvent(pitchIn, timeIn);
andrew@2 53 recordedTracks.matchNewPitchEvent(0, pitchIn, timeIn);
andrew@2 54 }
andrew@2 55
andrew@2 56 void AudioEventMatcher::newKickEvent(const double& timeIn){
andrew@2 57 matchNewOnsetEvent(0, timeIn);
andrew@2 58 }
andrew@2 59
andrew@2 60
andrew@2 61 void AudioEventMatcher::newSnareEvent(const double& timeIn){
andrew@2 62 matchNewOnsetEvent(0, timeIn);
andrew@2 63 }
andrew@2 64
andrew@2 65 //Needs just to set bounds for the matching process, not have TimeIn
andrew@2 66 void AudioEventMatcher::matchNewOnsetEvent(const int& channel, const double& timeIn){
andrew@2 67 //start at beginning but OPTIMISE later
andrew@2 68 double likelihoodToNoise = 0.5;
andrew@2 69
andrew@2 70 double likelihoodWidth = 40;
andrew@2 71
andrew@2 72 bayesianStruct.likelihood.offset = bayesianStruct.prior.offset;
andrew@2 73 bayesianStruct.likelihood.zero();//set to zero
andrew@2 74
andrew@2 75 double quantity = 1;//likelihoodToNoiseRatio / numberOfMatches;
andrew@2 76 int numberOfMatchesFound = 0;
andrew@2 77
andrew@2 78
andrew@2 79 double startTime = bayesianStruct.likelihood.offset;
andrew@2 80 double endTime = bayesianStruct.likelihood.offset + matchWindowWidth;
andrew@2 81
andrew@2 82 if (channel <= recordedTracks.numberOfAudioTracks){
andrew@2 83 for (int i = 0;i < recordedTracks.loadedAudioFiles[channel].fileLoader.onsetDetect.chromaOnsets.size();i++){
andrew@2 84 double millisTime = recordedTracks.loadedAudioFiles[channel].fileLoader.onsetDetect.chromaOnsets[i].millisTime;
andrew@2 85 if (millisTime >= startTime && millisTime <= endTime){
andrew@2 86 bayesianStruct.likelihood.addGaussianShapeFromRealTime(millisTime, likelihoodWidth, quantity);
andrew@2 87 numberOfMatchesFound++;
andrew@2 88 printf("Adding Gaussian for onset at time %f offset %f\n", millisTime, bayesianStruct.likelihood.offset);
andrew@2 89
andrew@2 90 }
andrew@2 91 }
andrew@2 92 }
andrew@2 93
andrew@2 94 bayesianStruct.likelihood.renormalise();
andrew@2 95
andrew@2 96 //bayesStruct.likelihood.addConstant((1-likelihoodToNoiseRatio)/bayesStruct.likelihood.length);
andrew@2 97
andrew@2 98
andrew@1 99 }
andrew@1 100
andrew@1 101
andrew@1 102 void AudioEventMatcher::windowResized(const int& w, const int& h){
andrew@1 103 recordedTracks.windowResized(w,h);
andrew@0 104 }