diff DrumTimingLoader_OF/ofxAudioFileLoader/AudioAnalysis.cpp @ 0:82352cfc0b23

Added files from ISMIR groove drum timing work
author Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk>
date Mon, 01 Oct 2012 22:24:32 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DrumTimingLoader_OF/ofxAudioFileLoader/AudioAnalysis.cpp	Mon Oct 01 22:24:32 2012 +0100
@@ -0,0 +1,226 @@
+/*
+ *  AudioAnalysis.cpp
+ *  audioFileLoader4
+ *
+ *  Created by Andrew on 14/08/2011.
+ *  Copyright 2011 QMUL. All rights reserved.
+ *
+ */
+
+#include "AudioAnalysis.h"
+
+
+AudioAnalysis::AudioAnalysis(){
+//	chromoGramm.initialise(FRAMESIZE,2048);
+
+	scrollWidth = 1600;
+	
+}
+
+
+
+void AudioAnalysis::drawEnergyVectorFromPointer(){
+	DoubleVector* energyVec;
+	energyVec = &energyVector;
+	//xxx above
+	
+	ofSetColor(0xFF0066);
+	float screenHeight = ofGetHeight() ;
+	float screenWidth = ofGetWidth();  
+	float heightFactor = 8;
+	int i, j, startingFrame;
+	startingFrame = currentPlayingFrame / scrollWidth;//i.e. number of scroll widths in
+	startingFrame *= scrollWidth;
+	
+	for (i = 0; i < scrollWidth - 1; i++){
+		j = i + startingFrame;
+		if (j < (*energyVec).size())
+			ofLine(i*screenWidth/scrollWidth, screenHeight - ((*energyVec)[j]*screenHeight/heightFactor),
+				   screenWidth*(i+1)/scrollWidth, screenHeight - ((*energyVec)[j+1]*screenHeight/heightFactor));
+		
+	}
+}
+
+void AudioAnalysis::drawSpectralDifference(){
+	DoubleMatrix* dMatrix;
+	dMatrix = &chromaMatrix;
+	//get rid of these!
+	
+	int matrixSize = (*dMatrix).size();
+	if (matrixSize > 0){
+		
+		float screenHeight = ofGetHeight() ;
+		float screenWidth = ofGetWidth();
+		float heightFactor = 8;
+		double difference;
+		int i, j, startingFrame;
+		startingFrame = currentPlayingFrame / scrollWidth;//i.e. number of scroll widths in
+		startingFrame *= scrollWidth;//starting frame in terms of energy frames
+		startingFrame /= CHROMA_CONVERSION_FACTOR; //in terms of chroma frames
+		
+		float chromoLength = scrollWidth/CHROMA_CONVERSION_FACTOR;
+		for (i = 1; i < chromoLength; i++){//changed to add 1
+			j = i + startingFrame;
+			for (int y = 0;y < 12;y++){			
+				
+				if (j < matrixSize)
+					difference = (*dMatrix)[j][11-y] - (*dMatrix)[j-1][11-y];
+				else 
+					difference = 0;
+				
+				if (difference < 0)
+					difference = 0;//half wave rectify
+				
+				ofSetColor(0,0,255 * difference);//, 0;
+				ofRect(i*screenWidth/chromoLength,y*screenHeight/12,screenWidth/chromoLength,screenHeight/12);
+			}//end y
+		}//end i
+		
+	}///end if matrix has content
+	else{
+		printf("Error - please load audio first");
+	}
+	
+}
+
+
+/*
+void testApp::initialiseVariables(){
+	
+	energyIndex = 0;
+	//	frameIndex = 0;
+	chromaIndex = 0;
+	chromoGramm.initialise(FRAMESIZE,2048);//framesize 512 and hopsize 2048
+}
+
+
+//--------------------------------------------------------------
+void testApp::draw(){
+	switch (screenToDraw){
+		case 0:
+			if (drawSpectralDifferenceFunction)
+				drawSpectralDifference(&chromaMatrix);
+			else
+				drawDoubleMatrix(&chromaMatrix);
+			
+			drawEnergyVectorFromPointer(&firstEnergyVector);
+			break;
+		case 1:
+			//	audioHolder.drawAudioVectorMillis(1000, 1000+audioScale);
+			audioHolder.drawAudioVectorSamples(audioHolder.playPosition, audioHolder.playPosition+audioHolder.audioScaleSamples);
+			break;
+	}
+	
+	
+	
+	//ofSetColor(255,0,0);
+	//drawEnergyVectorFromPointer(&audioVector);
+	
+	ofSetColor(0xFFFFFF);
+	ofLine(audioPosition*width, 0, audioPosition*width, height);
+	
+	ofDrawBitmapString(soundFileName,80,480);
+	
+}
+
+
+void testApp::drawEnergyVectorFromPointer(DoubleVector* energyVec){
+	
+	ofSetColor(0xFF0066);
+	float screenHeight = ofGetHeight() ;
+	float screenWidth = ofGetWidth();  
+	float heightFactor = 8;
+	int i, j, startingFrame;
+	startingFrame = currentPlayingFrame / scrollWidth;//i.e. number of scroll widths in
+	startingFrame *= scrollWidth;
+	
+	for (i = 0; i < scrollWidth - 1; i++){
+		j = i + startingFrame;
+		if (j < (*energyVec).size())
+			ofLine(i*screenWidth/scrollWidth, screenHeight - ((*energyVec)[j]*screenHeight/heightFactor),
+				   screenWidth*(i+1)/scrollWidth, screenHeight - ((*energyVec)[j+1]*screenHeight/heightFactor));
+		
+	}
+}
+
+void testApp::drawSpectralDifference(DoubleMatrix* dMatrix){
+	int matrixSize = (*dMatrix).size();
+	if (matrixSize > 0){
+		
+		float screenHeight = ofGetHeight() ;
+		float screenWidth = ofGetWidth();
+		float heightFactor = 8;
+		double difference;
+		int i, j, startingFrame;
+		startingFrame = currentPlayingFrame / scrollWidth;//i.e. number of scroll widths in
+		startingFrame *= scrollWidth;//starting frame in terms of energy frames
+		startingFrame /= CHROMA_CONVERSION_FACTOR; //in terms of chroma frames
+		
+		float chromoLength = scrollWidth/CHROMA_CONVERSION_FACTOR;
+		for (i = 1; i < chromoLength; i++){//changed to add 1
+			j = i + startingFrame;
+			for (int y = 0;y < 12;y++){			
+				
+				if (j < matrixSize)
+					difference = (*dMatrix)[j][11-y] - (*dMatrix)[j-1][11-y];
+				else 
+					difference = 0;
+				
+				if (difference < 0)
+					difference = 0;//half wave rectify
+				
+				ofSetColor(0,0,255 * difference);//, 0;
+				ofRect(i*screenWidth/chromoLength,y*screenHeight/12,screenWidth/chromoLength,screenHeight/12);
+			}//end y
+		}//end i
+		
+	}///end if matrix has content
+	else{
+		printf("Error - please load audio first");
+	}
+	
+}
+
+
+void testApp::drawDoubleMatrix(DoubleMatrix* dMatrix){
+	//used to draw the chromagram matrix
+	int matrixSize = (*dMatrix).size();
+	if (matrixSize > 0){
+		
+		float screenHeight = ofGetHeight() ;
+		float screenWidth = ofGetWidth();
+		float heightFactor = 8;
+		int i, j, startingFrame;
+		startingFrame = currentPlayingFrame / scrollWidth;//i.e. number of scroll widths in
+		startingFrame *= scrollWidth;//starting frame in terms of energy frames
+		startingFrame /= CHROMA_CONVERSION_FACTOR; //in terms of chroma frames
+		
+		float chromoLength = scrollWidth/CHROMA_CONVERSION_FACTOR;
+		for (i = 0; i < chromoLength; i++){
+			j = i + startingFrame;
+			for (int y = 0;y < 12;y++){
+				
+				if (j < matrixSize)
+					ofSetColor(0,0,255 * (*dMatrix)[j][11-y]);
+				else 
+					ofSetColor(0,0,0);
+				
+				ofRect(i*screenWidth/chromoLength,y*screenHeight/12,screenWidth/chromoLength,screenHeight/12);
+			}//end y
+		}//end i
+		
+	}///end if matrix has content
+	else{
+		printf("Error - please load audio first");
+	}
+	
+	
+}
+
+
+
+
+
+*/
+
+