Browse Source

iOS audio fix for interruption handling.

tags/2021-05-28
jules 13 years ago
parent
commit
d6df57b1d2
1 changed files with 28 additions and 6 deletions
  1. +28
    -6
      modules/juce_audio_devices/native/juce_ios_Audio.cpp

+ 28
- 6
modules/juce_audio_devices/native/juce_ios_Audio.cpp View File

@@ -34,16 +34,18 @@ public:
callback (nullptr),
floatData (1, 2)
{
getSessionHolder().activeDevices.add (this);
numInputChannels = 2;
numOutputChannels = 2;
preferredBufferSize = 0;
AudioSessionInitialize (0, 0, interruptionListenerStatic, this);
updateDeviceInfo();
}
~IPhoneAudioIODevice()
{
getSessionHolder().activeDevices.removeValue (this);
close();
}
@@ -336,6 +338,31 @@ private:
}
}
//==================================================================================================
struct AudioSessionHolder
{
AudioSessionHolder()
{
AudioSessionInitialize (0, 0, interruptionListenerCallback, this);
}
static void interruptionListenerCallback (void* client, UInt32 interruptionType)
{
const Array <IPhoneAudioIODevice*>& activeDevices = static_cast <AudioSessionHolder*> (client)->activeDevices;
for (int i = activeDevices.size(); --i >= 0;)
activeDevices.getUnchecked(i)->interruptionListener (interruptionType);
}
Array <IPhoneAudioIODevice*> activeDevices;
};
static AudioSessionHolder& getSessionHolder()
{
static AudioSessionHolder audioSessionHolder;
return audioSessionHolder;
}
void interruptionListener (const UInt32 interruptionType)
{
/*if (interruptionType == kAudioSessionBeginInterruption)
@@ -373,11 +400,6 @@ private:
static_cast <IPhoneAudioIODevice*> (client)->routingChanged (propertyValue);
}
static void interruptionListenerStatic (void* client, UInt32 interruptionType)
{
static_cast <IPhoneAudioIODevice*> (client)->interruptionListener (interruptionType);
}
//==================================================================================================
void resetFormat (const int numChannels) noexcept
{


Loading…
Cancel
Save