add multi-channel audio support

This commit is contained in:
TrueZhuanjia committed 2025-10-28 21:54:16 +08:00
1 parent 28e2f13e87
commit cd9ef74f3f
1 file changed
+31 -4
+31 -4
View File
@@ -334,15 +334,41 @@ void ArCleanup(void)
} }
void AudioEngineInit(int sampleRate, int channelCount) { void AudioEngineInit(int sampleRate, int channelCount) {
audioEngine = [[AVAudioEngine alloc] init]; audioEngine = [[AVAudioEngine alloc] init];
audioPlayerNode = [[AVAudioPlayerNode alloc] init]; audioPlayerNode = [[AVAudioPlayerNode alloc] init];
[audioEngine attachNode:audioPlayerNode]; [audioEngine attachNode:audioPlayerNode];
AVAudioChannelLayout *layout;
audioFormat = [[AVAudioFormat alloc] initWithCommonFormat:AVAudioPCMFormatFloat32 switch (channelCount) {
sampleRate:sampleRate case 2:
channels:channelCount default:
interleaved:NO]; 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]; [audioEngine connect:audioPlayerNode to:audioEngine.mainMixerNode format:audioFormat];
@@ -350,6 +376,7 @@ void AudioEngineInit(int sampleRate, int channelCount) {
if (![audioEngine startAndReturnError:&err]) { if (![audioEngine startAndReturnError:&err]) {
NSLog(@"AudioEngine start error: %@", err); NSLog(@"AudioEngine start error: %@", err);
} }
[audioPlayerNode play]; [audioPlayerNode play];
} }