From 672283a1e43de67e58ac4eb1bb42bea11e561ebf Mon Sep 17 00:00:00 2001 From: jules Date: Fri, 27 Sep 2013 20:00:39 +0100 Subject: [PATCH] Fix for iOS audio device closing. --- .../native/juce_ios_Audio.cpp | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/modules/juce_audio_devices/native/juce_ios_Audio.cpp b/modules/juce_audio_devices/native/juce_ios_Audio.cpp index e53fc67c50..e21fe5597c 100644 --- a/modules/juce_audio_devices/native/juce_ios_Audio.cpp +++ b/modules/juce_audio_devices/native/juce_ios_Audio.cpp @@ -76,8 +76,7 @@ public: String open (const BigInteger& inputChannels, const BigInteger& outputChannels, - double sampleRate, - int bufferSize) + double sampleRate, int bufferSize) { close(); @@ -98,17 +97,14 @@ public: AudioSessionSetActive (true); - UInt32 audioCategory = (numInputChannels > 0 && audioInputIsAvailable) ? kAudioSessionCategory_PlayAndRecord - : kAudioSessionCategory_MediaPlayback; - - AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, sizeof (audioCategory), &audioCategory); - - if (audioCategory == kAudioSessionCategory_PlayAndRecord) + if (numInputChannels > 0 && audioInputIsAvailable) + { + setSessionUInt32Property (kAudioSessionProperty_AudioCategory, kAudioSessionCategory_PlayAndRecord); + setSessionUInt32Property (kAudioSessionProperty_OverrideCategoryEnableBluetoothInput, 1); + } + else { - // (note: mustn't set this until after the audio category property has been set) - UInt32 allowBluetoothInput = 1; - AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryEnableBluetoothInput, - sizeof (allowBluetoothInput), &allowBluetoothInput); + setSessionUInt32Property (kAudioSessionProperty_AudioCategory, kAudioSessionCategory_MediaPlayback); } AudioSessionAddPropertyListener (kAudioSessionProperty_AudioRouteChange, routingChangedStatic, this); @@ -134,6 +130,9 @@ public: if (isRunning) { isRunning = false; + + setSessionUInt32Property (kAudioSessionProperty_AudioCategory, kAudioSessionCategory_MediaPlayback); + AudioSessionRemovePropertyListenerWithUserData (kAudioSessionProperty_AudioRouteChange, routingChangedStatic, this); AudioSessionSetActive (false); @@ -494,15 +493,17 @@ private: //DBG ("audio route: " + nsStringToJuce (route)); if ([route hasPrefix: @"Receiver"]) - { - UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; - AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute, sizeof (audioRouteOverride), &audioRouteOverride); - } + setSessionUInt32Property (kAudioSessionProperty_OverrideAudioRoute, kAudioSessionOverrideAudioRoute_Speaker); CFRelease (audioRoute); } } + static void setSessionUInt32Property (AudioSessionPropertyID propID, UInt32 value) + { + AudioSessionSetProperty (propID, sizeof (value), &value); + } + JUCE_DECLARE_NON_COPYABLE (iOSAudioIODevice) };