andrew@0: /* andrew@0: * audioFile.cpp andrew@0: * audioFileLoader3 andrew@0: * andrew@0: * Created by Andrew on 31/07/2011. andrew@0: * Copyright 2011 QMUL. All rights reserved. andrew@0: * andrew@0: */ andrew@0: andrew@0: #include "AudioFile.h" andrew@0: andrew@0: const double samplingFrequency = 44100.0; andrew@0: andrew@0: AudioFile::AudioFile(){ andrew@0: audioScaleSamples = 44100.; andrew@0: playPosition = 0; andrew@0: } andrew@0: andrew@0: void AudioFile::drawAudioVectorMillis(double startTimeMillis, double endTimeMillis){ andrew@0: andrew@0: double startTimeSamples = startTimeMillis * samplingFrequency / 1000.0; andrew@0: double endTimeSamples = endTimeMillis * samplingFrequency / 1000.0; andrew@0: double screenHeight = ofGetHeight() ; andrew@0: double screenWidth = ofGetWidth(); andrew@0: andrew@0: ofSetColor(255,0,0); andrew@0: double numberOfSamples = endTimeSamples - startTimeSamples; andrew@0: double samplesPerPixel = numberOfSamples / screenWidth; andrew@0: string samplesString = "millis : sps "; andrew@0: samplesString += ofToString(samplesPerPixel, 2); andrew@0: samplesString += " , \n"; andrew@0: andrew@0: int lastSampleIndex = (int) startTimeSamples; andrew@0: andrew@0: for (int i = 1;i < screenWidth;i++){// && startTimeSamples + samplesPerPixel * i < endTimeSamples;i += 1){ andrew@0: int sampleIndex = (int) min((startTimeSamples + samplesPerPixel * i), (double) length-1); andrew@0: //if (sampleIndex < 0) andrew@0: // sampleIndex = 0; andrew@0: ofLine(i-1, screenHeight - (1-audioVector[sampleIndex])*screenHeight/2.0 , i, screenHeight - (1-audioVector[lastSampleIndex])*screenHeight/2.0); andrew@0: samplesString += ofToString(audioVector[i])+" , \n"; andrew@0: lastSampleIndex = sampleIndex; andrew@0: andrew@0: } andrew@0: ofDrawBitmapString(samplesString, 20,20); andrew@0: andrew@0: } andrew@0: andrew@0: andrew@0: andrew@0: void AudioFile::drawAudioVectorSamples(double startTimeSample, double endTimeSample){ andrew@0: andrew@0: screenHeight = ofGetHeight() ; andrew@0: double screenWidth = ofGetWidth(); andrew@0: andrew@0: ofSetColor(255,0,0); andrew@0: double numberOfSamples = endTimeSample - startTimeSample; andrew@0: double samplesPerPixel = numberOfSamples / screenWidth; andrew@0: andrew@0: double halfHeight = screenHeight/2; andrew@0: andrew@0: int lastSampleIndex = (int) startTimeSample; andrew@0: /* andrew@0: for (int i = 1;i < screenWidth;i++){// && startTimeSamples + samplesPerPixel * i < endTimeSamples;i += 1){ andrew@0: int sampleIndex = (int) (startTimeSample + samplesPerPixel * i); andrew@0: ofLine(i-1, screenHeight - (1-audioVector[sampleIndex])*screenHeight/2.0 , i, screenHeight - (1-audioVector[lastSampleIndex])*screenHeight/2.0); andrew@0: lastSampleIndex = sampleIndex; andrew@0: andrew@0: } andrew@0: */ andrew@1: double firstXpos = halfHeight; andrew@0: double firstYpos = getPosition(startTimeSample);//screenHeight - ((1-audioVector[startTimeSample])*screenHeight/2.0); andrew@0: andrew@0: int stepSize = 1;//(int) samplesPerPixel); optimize !! XXX andrew@0: for (int sampleIndex = startTimeSample+1;sampleIndex < min(endTimeSample, (double) length);sampleIndex+= stepSize){ andrew@0: andrew@0: double secondXpos = (sampleIndex - startTimeSample) * screenWidth/numberOfSamples; andrew@0: double secondYpos = getPosition(sampleIndex);//screenHeight - ((1-audioVector[sampleIndex])*screenHeight/2.0); andrew@0: ofLine(firstXpos, firstYpos, secondXpos, secondYpos); andrew@0: andrew@0: if (numberOfSamples < 100) andrew@0: ofCircle(secondXpos, secondYpos, 2); andrew@0: andrew@0: firstXpos = secondXpos; andrew@0: firstYpos = secondYpos; andrew@0: andrew@0: andrew@0: } andrew@0: andrew@0: string samplesString = "samples: sps " + ofToString(samplesPerPixel, 2); andrew@0: samplesString += ", number of smaplers " + ofToString(numberOfSamples, 2); andrew@0: samplesString += " , \n"; andrew@0: andrew@0: andrew@0: //info string andrew@0: string textString; andrew@0: textString = ofToString(playPosition, 1); andrew@0: ofDrawBitmapString(textString, 20, 20); andrew@0: ofDrawBitmapString(samplesString, 20, 60); andrew@0: andrew@0: andrew@0: andrew@0: ofSetColor(0,0,255); andrew@0: ofLine(0, halfHeight, screenWidth, halfHeight); andrew@0: andrew@0: } andrew@0: /* andrew@0: double testApp::getXposition(int index, int startTimeSampleIndex){ andrew@0: if (index >= 0 && index < audioVector.size()) andrew@0: return (index - startTimeSampleIndex) * screenWidth/numberOfSamples; andrew@0: } andrew@0: */ andrew@0: double AudioFile::getPosition(int index){ andrew@0: if (index >= 0 && index < audioVector.size()) andrew@0: return screenHeight - ((1-audioVector[index])*screenHeight/2.0); andrew@0: else andrew@0: return 0; andrew@0: } andrew@0: andrew@0: andrew@0: /* andrew@0: void AudioFile::drawAudioVectorSamples(double startTimeSample, double endTimeSample){ andrew@0: andrew@0: double screenHeight = ofGetHeight() ; andrew@0: double screenWidth = ofGetWidth(); andrew@0: andrew@0: ofSetColor(255,0,0); andrew@0: double numberOfSamples = endTimeSample - startTimeSample; andrew@0: double samplesPerPixel = numberOfSamples / screenWidth; andrew@0: andrew@0: double halfHeight = screenHeight/2; andrew@0: andrew@0: string samplesString = "samples: sps " + ofToString(samplesPerPixel, 2); andrew@0: samplesString += ", number of smaplers " + ofToString(numberOfSamples, 2); andrew@0: samplesString += " , \n"; andrew@0: andrew@0: int lastSampleIndex = (int) startTimeSample; andrew@0: andrew@0: for (int i = 1;i < screenWidth;i++){// && startTimeSamples + samplesPerPixel * i < endTimeSamples;i += 1){ andrew@0: int sampleIndex = (int) (startTimeSample + samplesPerPixel * i); andrew@0: ofLine(i-1, screenHeight - (1-audioVector[sampleIndex])*screenHeight/2.0 , i, screenHeight - (1-audioVector[lastSampleIndex])*screenHeight/2.0); andrew@0: lastSampleIndex = sampleIndex; andrew@0: andrew@0: } andrew@0: //info string andrew@0: string textString; andrew@0: textString = ofToString(playPosition, 1); andrew@0: ofDrawBitmapString(textString, 20, 20); andrew@0: ofDrawBitmapString(samplesString, 20, 60); andrew@0: andrew@0: andrew@0: andrew@0: ofSetColor(0,0,255); andrew@0: ofLine(0, halfHeight, screenWidth, halfHeight); andrew@0: andrew@0: } andrew@0: */ andrew@0: