From 447fc13416dddc496e2a01b42e5cfe33bbbb4247 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Tue, 18 Apr 2023 14:18:10 +0400 Subject: [PATCH] Don't create recorder's audio unit until audio session is activated (or else it won't work with headphones and music playing in other app) --- .../Sources/ManagedAudioRecorder.swift | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/submodules/TelegramUI/Sources/ManagedAudioRecorder.swift b/submodules/TelegramUI/Sources/ManagedAudioRecorder.swift index 0f5126ed12..9c564f72cd 100644 --- a/submodules/TelegramUI/Sources/ManagedAudioRecorder.swift +++ b/submodules/TelegramUI/Sources/ManagedAudioRecorder.swift @@ -337,11 +337,10 @@ final class ManagedAudioRecorderContext { self.toneTimer?.invalidate() } - func start() { - assert(self.queue.isCurrent()) - - self.paused = false - + private func setupAudioUnit() { + guard self.audioUnit.with({ $0 }) == nil else { + return + } var desc = AudioComponentDescription() desc.componentType = kAudioUnitType_Output desc.componentSubType = kAudioUnitSubType_RemoteIO @@ -395,6 +394,12 @@ final class ManagedAudioRecorderContext { } let _ = self.audioUnit.swap(audioUnit) + } + + func start() { + assert(self.queue.isCurrent()) + + self.paused = false if self.audioSessionDisposable == nil { let queue = self.queue @@ -402,6 +407,7 @@ final class ManagedAudioRecorderContext { queue.async { if let strongSelf = self, !strongSelf.paused { strongSelf.hasAudioSession = true + strongSelf.setupAudioUnit() strongSelf.audioSessionAcquired(headset: state.isHeadsetConnected) } }