From cd9ef74f3fbcd75ab8f28ede4dc289b86eddb850 Mon Sep 17 00:00:00 2001 From: TrueZhuanjia Date: Tue, 28 Oct 2025 21:54:16 +0800 Subject: [PATCH] add multi-channel audio support --- VoidLink/Stream/Connection.m | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/VoidLink/Stream/Connection.m b/VoidLink/Stream/Connection.m index d4149aca..32a6b4a5 100644 --- a/VoidLink/Stream/Connection.m +++ b/VoidLink/Stream/Connection.m @@ -334,15 +334,41 @@ void ArCleanup(void) } void AudioEngineInit(int sampleRate, int channelCount) { + audioEngine = [[AVAudioEngine alloc] init]; audioPlayerNode = [[AVAudioPlayerNode alloc] init]; [audioEngine attachNode:audioPlayerNode]; + + AVAudioChannelLayout *layout; - audioFormat = [[AVAudioFormat alloc] initWithCommonFormat:AVAudioPCMFormatFloat32 - sampleRate:sampleRate - channels:channelCount - interleaved:NO]; + switch (channelCount) { + case 2: + default: + audioFormat = [[AVAudioFormat alloc] initWithCommonFormat:AVAudioPCMFormatFloat32 + sampleRate:sampleRate + channels:channelCount + interleaved:NO]; + break; + case 6: + layout = + [[AVAudioChannelLayout alloc] initWithLayoutTag:kAudioChannelLayoutTag_MPEG_5_1_A]; + audioFormat = [[AVAudioFormat alloc] initWithCommonFormat:AVAudioPCMFormatFloat32 + sampleRate:sampleRate + interleaved:NO + channelLayout:layout]; + break; + case 8: + layout = + [[AVAudioChannelLayout alloc] initWithLayoutTag:kAudioChannelLayoutTag_MPEG_7_1_A]; + audioFormat = [[AVAudioFormat alloc] initWithCommonFormat:AVAudioPCMFormatFloat32 + sampleRate:sampleRate + interleaved:NO + channelLayout:layout]; + break; + } + + if(!audioFormat) return; [audioEngine connect:audioPlayerNode to:audioEngine.mainMixerNode format:audioFormat]; @@ -350,6 +376,7 @@ void AudioEngineInit(int sampleRate, int channelCount) { if (![audioEngine startAndReturnError:&err]) { NSLog(@"AudioEngine start error: %@", err); } + [audioPlayerNode play]; }