From 9e2ef6cc0d750ff3ac4340742955dedca140c937 Mon Sep 17 00:00:00 2001 From: True Zhuanjia Date: Sun, 26 Apr 2026 19:38:34 +0800 Subject: [PATCH] audio resume fix --- VoidLink/Stream/Connection.m | 38 +++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/VoidLink/Stream/Connection.m b/VoidLink/Stream/Connection.m index 63978fcd..5720b46d 100644 --- a/VoidLink/Stream/Connection.m +++ b/VoidLink/Stream/Connection.m @@ -402,14 +402,42 @@ void AudioEngineInit(int sampleRate, int channelCount) { + (void)resetSysAudioPlayback { audioSessionInterrupted = true; - [audioPlayerNode stop]; - [audioEngine stop]; - AudioEngineInit(audioConfig.sampleRate, audioConfig.channelCount); - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.5*NSEC_PER_SEC), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - audioSessionInterrupted = false; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0), + dispatch_get_main_queue(), ^{ + @try { + if (audioPlayerNode) { + [audioPlayerNode stop]; + } + + if (audioEngine) { + [audioEngine stop]; + [audioEngine reset]; + + if (audioPlayerNode) { + [audioEngine disconnectNodeInput:audioPlayerNode]; + [audioEngine disconnectNodeOutput:audioPlayerNode]; + [audioEngine detachNode:audioPlayerNode]; + } + } + + audioEngine = nil; + audioPlayerNode = nil; + + AudioEngineInit(audioConfig.sampleRate, audioConfig.channelCount); + } + @catch (NSException *exception) { + NSLog(@"resetSysAudioPlayback failed: %@, reason: %@", + exception.name, + exception.reason); + } + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), + dispatch_get_main_queue(), ^{ + audioSessionInterrupted = false; + }); }); } + void ArDecodeAndPlaySample(char* sampleData, int sampleLength) { if(appDidEnterBackgroundWithoutPip && muteInBackground) return;