From c3abff7d42990405e43a70fa7e69c4ac26d73b41 Mon Sep 17 00:00:00 2001 From: jules Date: Wed, 7 Nov 2012 10:05:54 +0000 Subject: [PATCH] Made iOS audio stop with an error callback when the playback device is removed. --- .../native/juce_ios_Audio.cpp | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/modules/juce_audio_devices/native/juce_ios_Audio.cpp b/modules/juce_audio_devices/native/juce_ios_Audio.cpp index 06f3fb5b91..63dd6a1314 100644 --- a/modules/juce_audio_devices/native/juce_ios_Audio.cpp +++ b/modules/juce_audio_devices/native/juce_ios_Audio.cpp @@ -157,15 +157,15 @@ public: int getOutputLatencyInSamples() { return 0; } //xxx int getInputLatencyInSamples() { return 0; } //xxx - void start (AudioIODeviceCallback* callback_) + void start (AudioIODeviceCallback* newCallback) { - if (isRunning && callback != callback_) + if (isRunning && callback != newCallback) { - if (callback_ != nullptr) - callback_->audioDeviceAboutToStart (this); + if (newCallback != nullptr) + newCallback->audioDeviceAboutToStart (this); const ScopedLock sl (callbackLock); - callback = callback_; + callback = newCallback; } } @@ -325,7 +325,12 @@ private: CFNumberGetValue (routeChangeReasonRef, kCFNumberSInt32Type, &routeChangeReason); if (routeChangeReason == kAudioSessionRouteChangeReason_OldDeviceUnavailable) - fixAudioRouteIfSetToReceiver(); + { + const ScopedLock sl (callbackLock); + + if (callback != nullptr) + callback->audioDeviceError ("Old device unavailable"); + } } updateDeviceInfo(); @@ -378,12 +383,10 @@ private: { close(); - { - const ScopedLock sl (callbackLock); + const ScopedLock sl (callbackLock); - if (callback != nullptr) - callback->audioDeviceError ("iOS audio session interruption"); - } + if (callback != nullptr) + callback->audioDeviceError ("iOS audio session interruption"); } if (interruptionType == kAudioSessionEndInterruption)