Corrected CoreAudio surround sound channel layouts

Fixes https://github.com/libsdl-org/SDL/issues/11709

(cherry picked from commit b2178857dc)
(cherry picked from commit 348bb53cc1)
This commit is contained in:
Sam Lantinga
2024-12-24 15:03:25 -08:00
parent eccd76a6ac
commit 1c3ad751de

View File

@@ -857,30 +857,39 @@ static int prepare_audioqueue(_THIS)
SDL_zero(layout);
switch (this->spec.channels) {
case 1:
// a standard mono stream
layout.mChannelLayoutTag = kAudioChannelLayoutTag_Mono;
break;
case 2:
// a standard stereo stream (L R) - implied playback
layout.mChannelLayoutTag = kAudioChannelLayoutTag_Stereo;
break;
case 3:
// L R LFE
layout.mChannelLayoutTag = kAudioChannelLayoutTag_DVD_4;
break;
case 4:
// front left, front right, back left, back right
layout.mChannelLayoutTag = kAudioChannelLayoutTag_Quadraphonic;
break;
case 5:
layout.mChannelLayoutTag = kAudioChannelLayoutTag_MPEG_5_0_A;
// L R LFE Ls Rs
layout.mChannelLayoutTag = kAudioChannelLayoutTag_DVD_6;
break;
case 6:
layout.mChannelLayoutTag = kAudioChannelLayoutTag_MPEG_5_1_A;
// L R C LFE Ls Rs
layout.mChannelLayoutTag = kAudioChannelLayoutTag_DVD_12;
break;
case 7:
/* FIXME: Need to move channel[4] (BC) to channel[6] */
layout.mChannelLayoutTag = kAudioChannelLayoutTag_MPEG_6_1_A;
// L R C LFE Cs Ls Rs
layout.mChannelLayoutTag = kAudioChannelLayoutTag_WAVE_6_1;
break;
case 8:
layout.mChannelLayoutTag = kAudioChannelLayoutTag_MPEG_7_1_A;
// L R C LFE Rls Rrs Ls Rs
layout.mChannelLayoutTag = kAudioChannelLayoutTag_WAVE_7_1;
break;
default:
return SDL_SetError("Unsupported audio channels");
}
if (layout.mChannelLayoutTag != 0) {
result = AudioQueueSetProperty(this->hidden->audioQueue, kAudioQueueProperty_ChannelLayout, &layout, sizeof(layout));