Skip to content

Commit 817a9f1

Browse files
committed
Update file scrubber controls
1 parent cef8bd0 commit 817a9f1

File tree

3 files changed

+55
-41
lines changed

3 files changed

+55
-41
lines changed

Source/Processors/FileReader/FileReader.cpp

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -105,14 +105,12 @@ FileReader::FileReader() : GenericProcessor ("File Reader")
105105

106106
}
107107

108-
109108
FileReader::~FileReader()
110109
{
111110
signalThreadShouldExit();
112111
notify();
113112
}
114113

115-
116114
AudioProcessorEditor* FileReader::createEditor()
117115
{
118116
editor = std::make_unique<FileReaderEditor>(this);
@@ -149,18 +147,7 @@ void FileReader::initialize(bool signalChainIsLoading)
149147

150148
void FileReader::togglePlayback()
151149
{
152-
153150
playbackActive = !playbackActive;
154-
155-
if (!playbackActive)
156-
{
157-
stopAcquisition();
158-
}
159-
else
160-
{
161-
startAcquisition();
162-
}
163-
164151
}
165152

166153
bool FileReader::playbackIsActive()
@@ -202,6 +189,7 @@ bool FileReader::startAcquisition()
202189

203190
bool FileReader::stopAcquisition()
204191
{
192+
205193
stopThread(500);
206194
static_cast<FileReaderEditor*> (getEditor())->stopTimer();
207195
return true;
@@ -320,6 +308,15 @@ void FileReader::setPlaybackStart(int64 startSample)
320308

321309
input->seekTo(startSample);
322310
currentSample = startSample;
311+
312+
switchBuffer();
313+
314+
if (CoreServices::getAcquisitionStatus() && !isThreadRunning())
315+
{
316+
m_shouldFillBackBuffer.set(true);
317+
startThread();
318+
}
319+
323320
}
324321

325322
void FileReader::setPlaybackStop(int64 stopSample)
@@ -336,7 +333,6 @@ String FileReader::getFile() const
336333
return String();
337334
}
338335

339-
340336
void FileReader::updateSettings()
341337
{
342338

@@ -466,7 +462,6 @@ Array<EventInfo> FileReader::getActiveEventInfo()
466462
return input->getEventInfo();
467463
}
468464

469-
470465
String FileReader::handleConfigMessage(String msg)
471466
{
472467

@@ -494,19 +489,17 @@ String FileReader::handleConfigMessage(String msg)
494489
void FileReader::process(AudioBuffer<float>& buffer)
495490
{
496491

492+
bool switchNeeded = false;
493+
497494
int samplesNeededPerBuffer = int (float (buffer.getNumSamples()) * (getDefaultSampleRate() / m_sysSampleRate));
498495

499-
if (!loopPlayback && totalSamplesAcquired + samplesNeededPerBuffer > stopSample)
496+
if (!playbackActive && totalSamplesAcquired + samplesNeededPerBuffer > stopSample)
500497
{
501498
samplesNeededPerBuffer = stopSample - totalSamplesAcquired;
502-
playbackActive = false;
499+
switchNeeded = true;
503500
}
504-
else if (!playbackActive)
505-
{
506-
samplesNeededPerBuffer = 0;
507-
}
508-
509-
m_samplesPerBuffer.set(samplesNeededPerBuffer);
501+
else
502+
m_samplesPerBuffer.set(samplesNeededPerBuffer);
510503
// FIXME: needs to account for the fact that the ratio might not be an exact
511504
// integer value
512505

@@ -533,13 +526,21 @@ void FileReader::process(AudioBuffer<float>& buffer)
533526

534527
totalSamplesAcquired += samplesNeededPerBuffer;
535528

529+
//LOGD("Total samples acquired: ", totalSamplesAcquired);
530+
536531
int64 stop = totalSamplesAcquired;
537532

538533
addEventsInRange(start, stop);
539534

540535
bufferCacheWindow += 1;
541536
bufferCacheWindow %= BUFFER_WINDOW_CACHE_SIZE;
542537

538+
if (switchNeeded)
539+
{
540+
bufferCacheWindow = 0;
541+
this->stopThread(100);
542+
}
543+
543544
}
544545

545546
void FileReader::addEventsInRange(int64 start, int64 stop)
@@ -634,6 +635,7 @@ void FileReader::run()
634635

635636
void FileReader::readAndFillBufferCache(HeapBlock<int16> &cacheBuffer)
636637
{
638+
637639
const int samplesNeededPerBuffer = m_samplesPerBuffer.get();
638640
const int samplesNeeded = samplesNeededPerBuffer * BUFFER_WINDOW_CACHE_SIZE;
639641

@@ -654,6 +656,11 @@ void FileReader::readAndFillBufferCache(HeapBlock<int16> &cacheBuffer)
654656
samplesToRead = stopSample - currentSample;
655657
if (samplesToRead > 0)
656658
input->readData (cacheBuffer + samplesRead * currentNumChannels, samplesToRead);
659+
660+
if (startSample != 0)
661+
{
662+
startSample = 0;
663+
}
657664

658665
// reset stream to beginning
659666
input->seekTo (startSample);

Source/Processors/FileReader/FileReader.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,9 @@ class FileReader :
135135
/** Converts milliseconds to samples using current stream's sample rate */
136136
int64 millisecondsToSamples (unsigned int ms) const;
137137

138+
/** Swaps the backbuffer to the front and flags the background readerthread to update the new backbuffer */
139+
void switchBuffer();
140+
138141
private:
139142

140143
/** Currently only support one event channel per stream */
@@ -178,9 +181,6 @@ class FileReader :
178181
unsigned int m_bufferSize;
179182
float m_sysSampleRate;
180183

181-
/** Swaps the backbuffer to the front and flags the background readerthread to update the new backbuffer */
182-
void switchBuffer();
183-
184184
HeapBlock<int16>* getFrontBuffer();
185185
HeapBlock<int16>* getBackBuffer();
186186

Source/Processors/FileReader/FileReaderEditor.cpp

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -150,11 +150,6 @@ void FullTimeline::mouseUp(const MouseEvent& event)
150150
intervalIsSelected = false;
151151

152152
static_cast<FileReaderEditor*>(fileReader->getEditor())->updatePlaybackTimes();
153-
154-
if (CoreServices::getAcquisitionStatus())
155-
{
156-
fileReader->startAcquisition();
157-
}
158153

159154
}
160155

@@ -188,7 +183,7 @@ void ZoomTimeline::updatePlaybackRegion(int min, int max)
188183
{
189184
/* Default zoom slider region to first 10s */
190185
leftSliderPosition = 0;
191-
rightSliderPosition = ( getWidth() - sliderWidth ) / 3.0f;
186+
rightSliderPosition = ( getWidth() - sliderWidth ) / 10.0f;
192187
}
193188

194189
int ZoomTimeline::getStartInterval()
@@ -285,13 +280,14 @@ void ZoomTimeline::paint(Graphics& g)
285280

286281
/* Draw the current playback position */
287282
float timelinePos = (float)(fileReader->getCurrentSample() - startTimestamp) / (stopTimestamp - startTimestamp) * getWidth();
288-
289-
if (timelinePos < rightSliderPosition + sliderWidth || (timelinePos < rightSliderPosition + sliderWidth && !fileReader->loopPlayback))
283+
//LOGD("Timeline pos: ", timelinePos, " current sample: ", fileReader->getCurrentSample(), " start timestamp: ", startTimestamp, " stop timestamp: ", stopTimestamp);
284+
if (fileReader->playbackIsActive() || (!fileReader->playbackIsActive() && timelinePos < rightSliderPosition + sliderWidth))
290285
{
291286
g.setOpacity(1.0f);
292287
g.fillRoundedRectangle(timelinePos, 0, 1, this->getHeight(), 0.2);
293288
}
294289

290+
295291
}
296292

297293
void ZoomTimeline::mouseDown(const MouseEvent& event)
@@ -362,12 +358,12 @@ void ZoomTimeline::mouseUp(const MouseEvent& event)
362358
rightSliderIsSelected = false;
363359
playbackRegionIsSelected = false;
364360

365-
//fileReader->loopPlayback = false;
361+
if (fileReader->playbackIsActive())
362+
{
363+
fileReader->switchBuffer();
364+
}
366365

367-
static_cast<FileReaderEditor*>(fileReader->getEditor())->updatePlaybackTimes();
368-
369-
if (CoreServices::getAcquisitionStatus())
370-
fileReader->startAcquisition();
366+
static_cast<FileReaderEditor*>(fileReader->getEditor())->updatePlaybackTimes();
371367

372368
}
373369

@@ -726,6 +722,7 @@ void FileReaderEditor::buttonClicked (Button* button)
726722
} else if (button == playbackButton) {
727723

728724
playbackButton->setState(!playbackButton->getState());
725+
updatePlaybackTimes();
729726
fileReader->togglePlayback();
730727

731728
}
@@ -734,12 +731,22 @@ void FileReaderEditor::buttonClicked (Button* button)
734731

735732
void FileReaderEditor::updatePlaybackTimes()
736733
{
734+
735+
//fileReader->switchBuffer();
736+
737737
int64 startTimestamp = float(getFullTimelineStartPosition()) / fullTimeline->getWidth() * fileReader->getCurrentNumTotalSamples();
738738
startTimestamp += float(getZoomTimelineStartPosition()) / zoomTimeline->getWidth() * fileReader->getCurrentSampleRate() * 30.0f;
739739
fileReader->setPlaybackStart(startTimestamp);
740740

741-
int64 stopTimestamp = startTimestamp + zoomTimeline->getIntervalDurationInSeconds() * fileReader->getCurrentSampleRate();
742-
fileReader->setPlaybackStop(stopTimestamp);
741+
if (playbackButton->getState())
742+
{
743+
fileReader->setPlaybackStop(fileReader->getCurrentNumTotalSamples());
744+
}
745+
else
746+
{
747+
int64 stopTimestamp = startTimestamp + zoomTimeline->getIntervalDurationInSeconds() * fileReader->getCurrentSampleRate();
748+
fileReader->setPlaybackStop(stopTimestamp);
749+
}
743750

744751
}
745752

0 commit comments

Comments
 (0)