Skip to content

Commit e25f8ce

Browse files
committed
0.31.10
1 parent 969379b commit e25f8ce

File tree

5 files changed

+45
-26
lines changed

5 files changed

+45
-26
lines changed

buildspec.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,6 @@
4747
"uuids": {
4848
"windowsApp": "ad885c58-5ca9-44de-8f4f-1c12676626a9"
4949
},
50-
"version": "0.31.9",
50+
"version": "0.31.10",
5151
"website": "https://www.atkaudio.com"
5252
}

lib/atkaudio/src/atkaudio/DeviceIo/DeviceIo.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,25 @@ struct atk::DeviceIo::Impl
4242
auto& fromObsBuffer = deviceIoApp->getFromObsBuffer();
4343
toObsBuffer.reset();
4444
fromObsBuffer.reset();
45+
// Start fade-in over one buffer
46+
fadeInSamplesRemaining = numSamples;
47+
fadeInTotalSamples = numSamples;
48+
}
49+
50+
// Apply fade-in ramp if active
51+
if (fadeInSamplesRemaining > 0)
52+
{
53+
for (int ch = 0; ch < numChannels; ++ch)
54+
{
55+
auto* channelData = buffer[ch];
56+
int fadeStart = fadeInTotalSamples - fadeInSamplesRemaining;
57+
for (int i = 0; i < numSamples && fadeInSamplesRemaining > 0; ++i)
58+
{
59+
float gain = static_cast<float>(fadeStart + i + 1) / static_cast<float>(fadeInTotalSamples);
60+
channelData[i] *= gain;
61+
}
62+
}
63+
fadeInSamplesRemaining = std::max(0, fadeInSamplesRemaining - numSamples);
4564
}
4665

4766
if (tempBuffer.getNumChannels() < numChannels || tempBuffer.getNumSamples() < numSamples)
@@ -224,6 +243,8 @@ struct atk::DeviceIo::Impl
224243
bool mixInput = false;
225244
std::atomic<bool> bypass{false};
226245
std::atomic<bool> wasBypassed{false};
246+
int fadeInSamplesRemaining{0};
247+
int fadeInTotalSamples{0};
227248

228249
public:
229250
void setBypass(bool v)

lib/atkaudio/src/atkaudio/DeviceIo2/DeviceIo2.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ struct atk::DeviceIo2::Impl : public juce::AsyncUpdater
3333
bool delayPrepared = false;
3434
std::atomic<bool> bypass{false};
3535
std::atomic<bool> wasBypassed{false};
36+
int fadeInSamplesRemaining{0};
37+
int fadeInTotalSamples{0};
3638

3739
enum class UpdateType
3840
{
@@ -205,7 +207,28 @@ struct atk::DeviceIo2::Impl : public juce::AsyncUpdater
205207

206208
// Clear stale data from AudioClient buffers when transitioning from bypassed to active
207209
if (wasJustBypassed)
210+
{
208211
audioClient.clearBuffers();
212+
// Start fade-in over one buffer
213+
fadeInSamplesRemaining = numSamples;
214+
fadeInTotalSamples = numSamples;
215+
}
216+
217+
// Apply fade-in ramp if active
218+
if (fadeInSamplesRemaining > 0)
219+
{
220+
for (int ch = 0; ch < numChannels; ++ch)
221+
{
222+
auto* channelData = buffer[ch];
223+
int fadeStart = fadeInTotalSamples - fadeInSamplesRemaining;
224+
for (int i = 0; i < numSamples && fadeInSamplesRemaining > 0; ++i)
225+
{
226+
float gain = static_cast<float>(fadeStart + i + 1) / static_cast<float>(fadeInTotalSamples);
227+
channelData[i] *= gain;
228+
}
229+
}
230+
fadeInSamplesRemaining = std::max(0, fadeInSamplesRemaining - numSamples);
231+
}
209232
bool needsReconfiguration =
210233
preparedNumChannels != numChannels || preparedNumSamples < numSamples || preparedSampleRate != sampleRate;
211234

lib/atkaudio/src/atkaudio/PluginHost2/UI/MainHostWindow.cpp

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -150,11 +150,6 @@ MainHostWindow::MainHostWindow()
150150
);
151151

152152
knownPluginList.addChangeListener(this);
153-
deviceManager.addChangeListener(this);
154-
155-
// Track current device name
156-
if (auto* device = deviceManager.getCurrentAudioDevice())
157-
lastDeviceName = device->getName();
158153

159154
if (auto* g = graphHolder->graph.get())
160155
g->addChangeListener(this);
@@ -188,7 +183,6 @@ MainHostWindow::~MainHostWindow()
188183

189184
pluginListWindow = nullptr;
190185
knownPluginList.removeChangeListener(this);
191-
deviceManager.removeChangeListener(this);
192186

193187
if (auto* g = graphHolder->graph.get())
194188
g->removeChangeListener(this);
@@ -239,24 +233,6 @@ void MainHostWindow::changeListenerCallback(ChangeBroadcaster* changed)
239233
menuItemsChanged();
240234
atk::SharedPluginList::getInstance()->savePluginList(knownPluginList);
241235
}
242-
else if (changed == &deviceManager)
243-
{
244-
auto* device = deviceManager.getCurrentAudioDevice();
245-
juce::String currentDeviceName = device ? device->getName() : juce::String();
246-
247-
if (currentDeviceName != lastDeviceName)
248-
{
249-
lastDeviceName = currentDeviceName;
250-
251-
if (device != nullptr)
252-
{
253-
auto setup = deviceManager.getAudioDeviceSetup();
254-
setup.useDefaultInputChannels = true;
255-
setup.useDefaultOutputChannels = true;
256-
deviceManager.setAudioDeviceSetup(setup, true);
257-
}
258-
}
259-
}
260236
else if (graphHolder != nullptr && changed == graphHolder->graph.get())
261237
{
262238
auto title = juce::String("atkAudio PluginHost2");

lib/atkaudio/src/atkaudio/PluginHost2/UI/MainHostWindow.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,6 @@ class MainHostWindow final
191191

192192
// OLD: Keep for backward compatibility with VirtualAudioIODevice
193193
AudioDeviceManager deviceManager;
194-
juce::String lastDeviceName; // Track device changes
195194

196195
AudioPluginFormatManager formatManager;
197196

0 commit comments

Comments
 (0)