Skip to content

Commit da63669

Browse files
committed
0.15.2
1 parent 3906264 commit da63669

File tree

3 files changed

+18
-30
lines changed

3 files changed

+18
-30
lines changed

buildspec.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,6 @@
4343
"uuids": {
4444
"windowsApp": "ad885c58-5ca9-44de-8f4f-1c12676626a9"
4545
},
46-
"version": "0.15.1",
46+
"version": "0.15.2",
4747
"website": "https://www.atkaudio.com"
4848
}

lib/atkaudio/src/atkaudio/FifoBuffer.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,6 @@ struct atk::FifoBuffer::Impl
1111
fifo.reset(new juce::AbstractFifo(1));
1212
}
1313

14-
~Impl()
15-
{
16-
}
17-
1814
void reset()
1915
{
2016
fifo->reset();

lib/atkaudio/src/atkaudio/FifoBuffer2.h

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#include <juce_audio_utils/juce_audio_utils.h>
44

55
constexpr auto ATK_CORRECTION_RATE = 1 + 1000.0f / 1000000; // 1000 ppm
6-
constexpr auto ATK_SMOOTHING_TIME = 1.0f; // 1 second
6+
constexpr auto ATK_SMOOTHING_TIME = 0.1f; // seconds
77

88
class FifoBuffer2 : public juce::Timer
99
{
@@ -263,9 +263,8 @@ class SyncBuffer : public juce::Timer
263263

264264
tempBuffer.setSize(numChannels, 2 * std::max(readerBufferSize, writerBufferSize), false, false, true);
265265

266-
rateSmoothing.reset(readerSampleRate, ATK_SMOOTHING_TIME);
266+
rateSmoothing.reset(readerSampleRate * ATK_SMOOTHING_TIME);
267267
rateSmoothing.setCurrentAndTargetValue(1.0);
268-
rateSmoothingBuffer.setSize(numChannels, readerBufferSize, false, false, true);
269268

270269
tempBuffer.clear();
271270
fifoBuffer.write(tempBuffer.getArrayOfWritePointers(), numChannels, minBufferSize);
@@ -326,18 +325,7 @@ class SyncBuffer : public juce::Timer
326325
else if (maxAvailable > maxBufferSize)
327326
factor = ATK_CORRECTION_RATE;
328327

329-
rateSmoothing.setTargetValue(factor);
330-
rateSmoothingBuffer.setSize(1, numSamples, false, false, true);
331-
float maxFactor = 0.0f;
332-
for (int i = 0; i < numSamples; ++i)
333-
{
334-
auto currentFactor = rateSmoothing.getNextValue();
335-
if (currentFactor > maxFactor)
336-
maxFactor = currentFactor;
337-
rateSmoothingBuffer.getWritePointer(0)[i] = currentFactor;
338-
}
339-
340-
int writerSamplesNeeded = std::ceil(numSamples * ratio * maxFactor);
328+
int writerSamplesNeeded = std::ceil(numSamples * ratio * factor);
341329

342330
if (!addToBuffer)
343331
for (int ch = 0; ch < numChannels; ++ch)
@@ -352,30 +340,35 @@ class SyncBuffer : public juce::Timer
352340
{
353341
#ifdef JUCE_DEBUG
354342
DBG(juce::Time::getCurrentTime().toString(true, true)
355-
<< " got " << writerSamples << " needed " << writerSamplesNeeded << " ratio " << ratio);
343+
<< " got " << writerSamples << " needed " << writerSamplesNeeded << " ratio " << ratio << " factor "
344+
<< factor);
356345
#endif
357-
// return false;
346+
return false;
358347
}
359348

360349
if (!addToBuffer)
361350
for (int ch = 0; ch < numChannels; ++ch)
362351
std::memset(dest[ch], 0, sizeof(float) * numSamples);
363352

364-
auto smoothingReadPtr = rateSmoothingBuffer.getReadPointer(0);
365353
auto totalSamplesConsumed = 0;
366354

367-
auto finalRatio = 0.0f;
355+
auto initialRate = rateSmoothing.getCurrentValue();
356+
357+
auto finalRatio = 0.0;
368358
for (int i = 0; i < numChannels; i++)
369359
{
370360
totalSamplesConsumed = 0;
371361
int samplesAvailable = writerSamples;
372362

373363
auto ch = i % numChannels;
374364

365+
rateSmoothing.setCurrentAndTargetValue(initialRate);
366+
rateSmoothing.setTargetValue(factor);
367+
375368
for (int j = 0; j < numSamples; ++j)
376369
{
377-
auto currentFactor = smoothingReadPtr[j];
378-
finalRatio = ratio * currentFactor;
370+
auto smoothingValue = rateSmoothing.getNextValue();
371+
finalRatio = ratio * smoothingValue;
379372

380373
int samplesConsumed = interpolators[i].processAdding(
381374
finalRatio,
@@ -393,7 +386,7 @@ class SyncBuffer : public juce::Timer
393386

394387
#ifdef JUCE_DEBUG
395388
if (!juce::approximatelyEqual(finalRatio, prevFinalRatio)
396-
&& juce::approximatelyEqual(finalRatio, (float)(writerSampleRate / readerSampleRate)))
389+
&& juce::approximatelyEqual(finalRatio, (double)(writerSampleRate / readerSampleRate)))
397390
DBG("time: " << juce::Time::getCurrentTime().toString(true, true)
398391
<< juce::String(" final ratio ") + juce::String(finalRatio));
399392
#endif
@@ -424,11 +417,10 @@ class SyncBuffer : public juce::Timer
424417
int minBufferSize{0};
425418
int maxBufferSize{0};
426419

427-
juce::LinearSmoothedValue<float> rateSmoothing;
428-
juce::AudioBuffer<float> rateSmoothingBuffer;
420+
juce::LinearSmoothedValue<double> rateSmoothing;
429421

430422
juce::CriticalSection readLock;
431423
juce::CriticalSection writeLock;
432424

433-
float prevFinalRatio{1.0f};
425+
double prevFinalRatio{1.0};
434426
};

0 commit comments

Comments
 (0)