9 mSDIFFileReader(argSDIFInConfig),
10 frameBufferPosition(1),
14 mReaderHasMoreFrames( true ),
25 for (
unsigned int counter = 0; counter < frameBuffer.size(); counter++)
27 delete frameBuffer[counter];
34 if ( response = mSDIFFileReader.
Configure(config) )
38 if ( config.HasNumberOfFramesToPreload() )
41 LoadFramesIntoBuffer( config.GetNumberOfFramesToPreload()+1 );
48 if ( config.HasNumberOfFramesToLoad() )
50 totalNumberOfFramesToLoad = config.GetNumberOfFramesToLoad();
54 if (config.HasNumberOfFramesToPreload())
55 totalNumberOfFramesToLoad = config.GetNumberOfFramesToPreload()+1;
57 totalNumberOfFramesToLoad = INT_MAX;
71 return frameBufferPosition;
76 frameBufferPosition = argFrameBufferPosition;
83 Frame* requestedFrame = frameBuffer.at(frameBufferPosition);
85 return requestedFrame;
90 int framesTillTheEnd = frameBuffer.size() - frameBufferPosition;
91 if ((mReaderHasMoreFrames ==
true) && (framesTillTheEnd < mThreshholdForPreloading))
93 mReaderHasMoreFrames = LoadFramesIntoBuffer(mFrameLoadChunkSize);
96 if ( frameBuffer.size() == 0 )
105 Frame* nextFrame = frameBuffer.at(frameBufferPosition);
106 frameBufferPosition++;
108 if (nextFrame ==
NULL)
110 std::cout <<
"next frame is null" << std::endl;
117 bool BufferedSDIFFileReader::LoadFramesIntoBuffer(
int argNumberOfBuffers)
122 std::deque<Frame*> tempFrameBuffer;
130 for (
int counter = 0; counter < argNumberOfBuffers; counter++)
133 aFrame->AddSpectralPeakArray();
134 aFrame->AddResidualSpec();
135 aFrame->AddFundamental();
136 aFrame->AddSynthAudioFrame();
139 TTime frameCenterTime;
142 mReaderHasMoreFrames = mSDIFFileReader.
ReadFrame( aFrame->GetFundamental(), aFrame->GetSpectralPeakArray(), aFrame->GetResidualSpec(), frameCenterTime );
148 if (mReaderHasMoreFrames)
150 aFrame->SetCenterTime(frameCenterTime);
152 tempFrameBuffer.push_back( aFrame );
156 std::cout <<
"BufferedSDIFReader: could only load " << counter <<
" of ";
157 std::cout << argNumberOfBuffers <<
" frames." << std::endl;
166 for (
unsigned int counter = 0; counter < tempFrameBuffer.size(); counter++)
168 Frame* aFrame = tempFrameBuffer.at(counter);
169 frameBuffer.push_back( aFrame );
172 return mReaderHasMoreFrames;
178 return frameBuffer.size();
183 CLAM_ASSERT(argThread !=
NULL,
"Thread* given to BufferedSDIFFileReader may not be null!");
185 mThreadPtr = argThread;
195 catch( std::exception& e )
197 std::cerr << e.what() << std::endl;
198 std::string msg(
"BufferedSDIFFileReader: exception when starting thread. SDIFFile will be loaded on main thread.");
199 std::cerr << msg << std::endl;
207 if ( mThreadPtr !=
NULL)
212 catch( std::exception& e )
214 std::cerr << e.what() << std::endl;
215 std::string msg(
"BufferedSDIFFileReader: exception when stopping thread.");
216 std::cerr << msg << std::endl;
222 return mThreadPtr !=
NULL;
225 void BufferedSDIFFileReader::Run()
227 int iterationsSinceLastExecution = 0;
228 while ( mReaderHasMoreFrames && totalNumberOfFramesToLoad <= frameBuffer.size() )
231 mReaderHasMoreFrames = LoadFramesIntoBuffer(mFrameLoadChunkSize);
232 iterationsSinceLastExecution = 0;