From c97864d7f34f8d4ea4caa794d818318073e751a2 Mon Sep 17 00:00:00 2001 From: attila Date: Thu, 15 Sep 2022 14:46:21 +0200 Subject: [PATCH] Remove AudioIODeviceCallback::audioDeviceIOCallback --- BREAKING-CHANGES.txt | 20 ++++++++++++++++++ examples/Assets/AudioLiveScrollingDisplay.h | 8 ++++--- examples/Audio/AudioLatencyDemo.h | 7 +++++-- examples/Audio/AudioRecordingDemo.h | 8 ++++--- examples/Audio/MPEDemo.h | 8 ++++--- .../audio_io/juce_AudioDeviceManager.cpp | 17 +++++++++++---- .../audio_io/juce_AudioIODevice.h | 21 ++++--------------- .../sources/juce_AudioSourcePlayer.cpp | 13 +++++++----- .../sources/juce_AudioSourcePlayer.h | 13 ++++++------ .../Standalone/juce_StandaloneFilterWindow.h | 2 +- .../players/juce_SoundPlayer.cpp | 17 ++++++++------- .../players/juce_SoundPlayer.h | 2 +- 12 files changed, 83 insertions(+), 53 deletions(-) diff --git a/BREAKING-CHANGES.txt b/BREAKING-CHANGES.txt index 9c57f9dbff..a31ef56a08 100644 --- a/BREAKING-CHANGES.txt +++ b/BREAKING-CHANGES.txt @@ -4,6 +4,26 @@ JUCE breaking changes develop ======= +Change +------ +The function AudioIODeviceCallback::audioDeviceIOCallback() was removed. + +Possible Issues +--------------- +Code overriding audioDeviceIOCallback() will fail to compile. + +Workaround +---------- +Affected classes should override the audioDeviceIOCallbackWithContext() function +instead. + +Rationale +--------- +The audioDeviceIOCallbackWithContext() function fulfills the same role as +audioDeviceIOCallback(), it just has an extra parameter. Hence the +audioDeviceIOCallback() function was superfluous. + + Change ------ The type representing multi-channel audio data has been changed from T** to diff --git a/examples/Assets/AudioLiveScrollingDisplay.h b/examples/Assets/AudioLiveScrollingDisplay.h index 9aa76d40f1..d706170dc2 100644 --- a/examples/Assets/AudioLiveScrollingDisplay.h +++ b/examples/Assets/AudioLiveScrollingDisplay.h @@ -45,10 +45,12 @@ public: clear(); } - void audioDeviceIOCallback (const float* const* inputChannelData, int numInputChannels, - float* const* outputChannelData, int numOutputChannels, - int numberOfSamples) override + void audioDeviceIOCallbackWithContext (const float* const* inputChannelData, int numInputChannels, + float* const* outputChannelData, int numOutputChannels, + int numberOfSamples, const AudioIODeviceCallbackContext& context) override { + ignoreUnused (context); + for (int i = 0; i < numberOfSamples; ++i) { float inputSample = 0; diff --git a/examples/Audio/AudioLatencyDemo.h b/examples/Audio/AudioLatencyDemo.h index 4e6cddd989..cd47e94a35 100644 --- a/examples/Audio/AudioLatencyDemo.h +++ b/examples/Audio/AudioLatencyDemo.h @@ -136,9 +136,12 @@ public: void audioDeviceStopped() override {} - void audioDeviceIOCallback (const float* const* inputChannelData, int numInputChannels, - float* const* outputChannelData, int numOutputChannels, int numSamples) override + void audioDeviceIOCallbackWithContext (const float* const* inputChannelData, int numInputChannels, + float* const* outputChannelData, int numOutputChannels, + int numSamples, const AudioIODeviceCallbackContext& context) override { + ignoreUnused (context); + const ScopedLock sl (lock); if (testIsRunning) diff --git a/examples/Audio/AudioRecordingDemo.h b/examples/Audio/AudioRecordingDemo.h index 4a759e7610..38bf15b7d7 100644 --- a/examples/Audio/AudioRecordingDemo.h +++ b/examples/Audio/AudioRecordingDemo.h @@ -134,10 +134,12 @@ public: sampleRate = 0; } - void audioDeviceIOCallback (const float* const* inputChannelData, int numInputChannels, - float* const* outputChannelData, int numOutputChannels, - int numSamples) override + void audioDeviceIOCallbackWithContext (const float* const* inputChannelData, int numInputChannels, + float* const* outputChannelData, int numOutputChannels, + int numSamples, const AudioIODeviceCallbackContext& context) override { + ignoreUnused (context); + const ScopedLock sl (writerLock); if (activeWriter.load() != nullptr && numInputChannels >= thumbnail.getNumChannels()) diff --git a/examples/Audio/MPEDemo.h b/examples/Audio/MPEDemo.h index eeccc8452f..10615ee733 100644 --- a/examples/Audio/MPEDemo.h +++ b/examples/Audio/MPEDemo.h @@ -689,10 +689,12 @@ public: } //============================================================================== - void audioDeviceIOCallback (const float* const* /*inputChannelData*/, int /*numInputChannels*/, - float* const* outputChannelData, int numOutputChannels, - int numSamples) override + void audioDeviceIOCallbackWithContext (const float* const* inputChannelData, int numInputChannels, + float* const* outputChannelData, int numOutputChannels, + int numSamples, const AudioIODeviceCallbackContext& context) override { + ignoreUnused (inputChannelData, numInputChannels, context); + AudioBuffer buffer (outputChannelData, numOutputChannels, numSamples); buffer.clear(); diff --git a/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp b/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp index c9f22e1223..e2645ef018 100644 --- a/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp +++ b/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp @@ -1891,10 +1891,19 @@ private: std::function stopped; std::function error; - void audioDeviceIOCallback (const float* const*, int, float* const*, int, int) override { NullCheckedInvocation::invoke (callback); } - void audioDeviceAboutToStart (AudioIODevice*) override { NullCheckedInvocation::invoke (aboutToStart); } - void audioDeviceStopped() override { NullCheckedInvocation::invoke (stopped); } - void audioDeviceError (const String&) override { NullCheckedInvocation::invoke (error); } + void audioDeviceIOCallbackWithContext (const float* const*, + int, + float* const*, + int, + int, + const AudioIODeviceCallbackContext&) override + { + NullCheckedInvocation::invoke (callback); + } + + void audioDeviceAboutToStart (AudioIODevice*) override { NullCheckedInvocation::invoke (aboutToStart); } + void audioDeviceStopped() override { NullCheckedInvocation::invoke (stopped); } + void audioDeviceError (const String&) override { NullCheckedInvocation::invoke (error); } }; void initialiseManager (AudioDeviceManager& manager) diff --git a/modules/juce_audio_devices/audio_io/juce_AudioIODevice.h b/modules/juce_audio_devices/audio_io/juce_AudioIODevice.h index a98411ed41..086054f788 100644 --- a/modules/juce_audio_devices/audio_io/juce_AudioIODevice.h +++ b/modules/juce_audio_devices/audio_io/juce_AudioIODevice.h @@ -39,7 +39,7 @@ struct AudioIODeviceCallbackContext One of these is passed to an AudioIODevice object to stream the audio data in and out. - The AudioIODevice will repeatedly call this class's audioDeviceIOCallback() + The AudioIODevice will repeatedly call this class's audioDeviceIOCallbackWithContext() method on its own high-priority audio thread, when it needs to send or receive the next block of data. @@ -90,20 +90,8 @@ public: processing into several smaller callbacks to ensure higher audio performance. So make sure your code can cope with reasonable changes in the buffer size from one callback to the next. - */ - virtual void audioDeviceIOCallback (const float* const* inputChannelData, - int numInputChannels, - float* const* outputChannelData, - int numOutputChannels, - int numSamples) - { - ignoreUnused (inputChannelData, numInputChannels, outputChannelData, numOutputChannels, numSamples); - } - - /** The same as audioDeviceIOCallback(), but with an additional context argument. - - The default implementation of this function will call audioDeviceIOCallback(), - but you can override this function if you need to make use of the context information. + @param context Additional information that may be passed to the + AudioIODeviceCallback. */ virtual void audioDeviceIOCallbackWithContext (const float* const* inputChannelData, int numInputChannels, @@ -112,8 +100,7 @@ public: int numSamples, const AudioIODeviceCallbackContext& context) { - audioDeviceIOCallback (inputChannelData, numInputChannels, outputChannelData, numOutputChannels, numSamples); - ignoreUnused (context); + ignoreUnused (inputChannelData, numInputChannels, outputChannelData, numOutputChannels, numSamples, context); } /** Called to indicate that the device is about to start calling back. diff --git a/modules/juce_audio_devices/sources/juce_AudioSourcePlayer.cpp b/modules/juce_audio_devices/sources/juce_AudioSourcePlayer.cpp index 901847243a..586f28497b 100644 --- a/modules/juce_audio_devices/sources/juce_AudioSourcePlayer.cpp +++ b/modules/juce_audio_devices/sources/juce_AudioSourcePlayer.cpp @@ -56,12 +56,15 @@ void AudioSourcePlayer::setGain (const float newGain) noexcept gain = newGain; } -void AudioSourcePlayer::audioDeviceIOCallback (const float* const* inputChannelData, - int totalNumInputChannels, - float* const* outputChannelData, - int totalNumOutputChannels, - int numSamples) +void AudioSourcePlayer::audioDeviceIOCallbackWithContext (const float* const* inputChannelData, + int totalNumInputChannels, + float* const* outputChannelData, + int totalNumOutputChannels, + int numSamples, + const AudioIODeviceCallbackContext& context) { + ignoreUnused (context); + // these should have been prepared by audioDeviceAboutToStart()... jassert (sampleRate > 0 && bufferSize > 0); diff --git a/modules/juce_audio_devices/sources/juce_AudioSourcePlayer.h b/modules/juce_audio_devices/sources/juce_AudioSourcePlayer.h index 73e638459f..8a975ee166 100644 --- a/modules/juce_audio_devices/sources/juce_AudioSourcePlayer.h +++ b/modules/juce_audio_devices/sources/juce_AudioSourcePlayer.h @@ -79,12 +79,13 @@ public: float getGain() const noexcept { return gain; } //============================================================================== - /** Implementation of the AudioIODeviceCallback method. */ - void audioDeviceIOCallback (const float* const* inputChannelData, - int totalNumInputChannels, - float* const* outputChannelData, - int totalNumOutputChannels, - int numSamples) override; + /** Implementation of the AudioIODeviceCallbackWithContext method. */ + void audioDeviceIOCallbackWithContext (const float* const* inputChannelData, + int totalNumInputChannels, + float* const* outputChannelData, + int totalNumOutputChannels, + int numSamples, + const AudioIODeviceCallbackContext& context) override; /** Implementation of the AudioIODeviceCallback method. */ void audioDeviceAboutToStart (AudioIODevice* device) override; diff --git a/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h b/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h index cb15aca6c8..884f7d40d6 100644 --- a/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h +++ b/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h @@ -425,7 +425,7 @@ private: On some platforms (such as iOS 10), the expected buffer size reported in audioDeviceAboutToStart may be smaller than the blocks passed to - audioDeviceIOCallback. This can lead to out-of-bounds reads if the render + audioDeviceIOCallbackWithContext. This can lead to out-of-bounds reads if the render callback depends on additional buffers which were initialised using the smaller size. diff --git a/modules/juce_audio_utils/players/juce_SoundPlayer.cpp b/modules/juce_audio_utils/players/juce_SoundPlayer.cpp index 6392a24d6b..90abda880f 100644 --- a/modules/juce_audio_utils/players/juce_SoundPlayer.cpp +++ b/modules/juce_audio_utils/players/juce_SoundPlayer.cpp @@ -242,15 +242,16 @@ void SoundPlayer::playTestSound() } //============================================================================== -void SoundPlayer::audioDeviceIOCallback (const float* const* inputChannelData, - int numInputChannels, - float* const* outputChannelData, - int numOutputChannels, - int numSamples) +void SoundPlayer::audioDeviceIOCallbackWithContext (const float* const* inputChannelData, + int numInputChannels, + float* const* outputChannelData, + int numOutputChannels, + int numSamples, + const AudioIODeviceCallbackContext& context) { - player.audioDeviceIOCallback (inputChannelData, numInputChannels, - outputChannelData, numOutputChannels, - numSamples); + player.audioDeviceIOCallbackWithContext (inputChannelData, numInputChannels, + outputChannelData, numOutputChannels, + numSamples, context); } void SoundPlayer::audioDeviceAboutToStart (AudioIODevice* device) diff --git a/modules/juce_audio_utils/players/juce_SoundPlayer.h b/modules/juce_audio_utils/players/juce_SoundPlayer.h index 59b1c62310..07edc7d308 100644 --- a/modules/juce_audio_utils/players/juce_SoundPlayer.h +++ b/modules/juce_audio_utils/players/juce_SoundPlayer.h @@ -110,7 +110,7 @@ public: //============================================================================== /** @internal */ - void audioDeviceIOCallback (const float* const*, int, float* const*, int, int) override; + void audioDeviceIOCallbackWithContext (const float* const*, int, float* const*, int, int, const AudioIODeviceCallbackContext&) override; /** @internal */ void audioDeviceAboutToStart (AudioIODevice*) override; /** @internal */