diff --git a/Source/CrossPlatformUtils.h b/Source/CrossPlatformUtils.h index 0fe77e682..e1832f909 100644 --- a/Source/CrossPlatformUtils.h +++ b/Source/CrossPlatformUtils.h @@ -20,4 +20,6 @@ void *binaryDataToUrlBookmark(const void * data, size_t size); juce::URL generateUpdatedURL (juce::URL& urlToUse); +int getMaximumOutputNumberOfChannels(); +bool setPreferredOutputNumberOfChannels(int count); #endif diff --git a/Source/CrossPlatformUtilsIOS.mm b/Source/CrossPlatformUtilsIOS.mm index 40b82d91a..db15ba5d7 100644 --- a/Source/CrossPlatformUtilsIOS.mm +++ b/Source/CrossPlatformUtilsIOS.mm @@ -15,6 +15,8 @@ +#import + #import #include "../JuceLibraryCode/JuceHeader.h" @@ -108,6 +110,18 @@ bool urlBookmarkToBinaryData(void * bookmark, const void * & retdata, size_t & r return returl; } +int getMaximumOutputNumberOfChannels() +{ + auto* session = [AVAudioSession sharedInstance]; + return [session maximumOutputNumberOfChannels]; +} + +bool setPreferredOutputNumberOfChannels(int count) +{ + auto* session = [AVAudioSession sharedInstance]; + NSError* error; + return [session setPreferredOutputNumberOfChannels:count error:&error]; +} #endif diff --git a/Source/SonoStandaloneFilterApp.cpp b/Source/SonoStandaloneFilterApp.cpp index 96d161025..c345fa233 100644 --- a/Source/SonoStandaloneFilterApp.cpp +++ b/Source/SonoStandaloneFilterApp.cpp @@ -442,6 +442,9 @@ class SonobusStandaloneFilterApp : public JUCEApplication, public Timer return; }; +#if JUCE_IOS + setPreferredOutputNumberOfChannels(getMaximumOutputNumberOfChannels()); +#endif if (!doHeadless) { mainWindow.reset (createWindow()); diff --git a/Source/SonobusPluginEditor.cpp b/Source/SonobusPluginEditor.cpp index e4c60bbbc..6f6c69858 100644 --- a/Source/SonobusPluginEditor.cpp +++ b/Source/SonobusPluginEditor.cpp @@ -21,6 +21,8 @@ #include "LatencyMatchView.h" #include "SuggestNewGroupView.h" #include "SonoCallOutBox.h" +#include "CrossPlatformUtils.h" + #include #if JUCE_ANDROID @@ -1938,6 +1940,8 @@ void SonobusAudioProcessorEditor::timerCallback(int timerid) #if JUCE_IOS if (JUCEApplicationBase::isStandaloneApp()) { + getAudioDeviceManager()->addChangeListener(this); + bool iaaconn = isInterAppAudioConnected(); if (iaaconn != iaaConnected) { iaaConnected = iaaconn; @@ -5174,6 +5178,11 @@ void SonobusAudioProcessorEditor::changeListenerCallback (ChangeBroadcaster* sou } else if (source == &(processor.getTransportSource())) { updateTransportState(); } +#if JUCE_IOS + else if (source == getAudioDeviceManager()) { + setPreferredOutputNumberOfChannels(getMaximumOutputNumberOfChannels()); + } +#endif } class SonobusAudioProcessorEditor::TrimFileJob : public ThreadPoolJob