diff --git a/rpcs3/Emu/Audio/Pulse/PulseThread.cpp b/rpcs3/Emu/Audio/Pulse/PulseThread.cpp index 945721a099..8ad34120a2 100644 --- a/rpcs3/Emu/Audio/Pulse/PulseThread.cpp +++ b/rpcs3/Emu/Audio/Pulse/PulseThread.cpp @@ -35,11 +35,32 @@ void PulseThread::Open(const void* src, int size) { pa_sample_spec ss; ss.format = g_cfg.audio.convert_to_u16 ? PA_SAMPLE_S16LE : PA_SAMPLE_FLOAT32LE; - ss.channels = g_cfg.audio.downmix_to_2ch ? 2 : 8; ss.rate = 48000; + pa_channel_map channel_map; + + if (g_cfg.audio.downmix_to_2ch) + { + channel_map.channels = 2; + channel_map.map[0] = PA_CHANNEL_POSITION_FRONT_LEFT; + channel_map.map[1] = PA_CHANNEL_POSITION_FRONT_RIGHT; + } + else + { + channel_map.channels = 8; + channel_map.map[0] = PA_CHANNEL_POSITION_FRONT_LEFT; + channel_map.map[1] = PA_CHANNEL_POSITION_FRONT_RIGHT; + channel_map.map[2] = PA_CHANNEL_POSITION_FRONT_CENTER; + channel_map.map[3] = PA_CHANNEL_POSITION_LFE; + channel_map.map[4] = PA_CHANNEL_POSITION_REAR_LEFT; + channel_map.map[5] = PA_CHANNEL_POSITION_REAR_RIGHT; + channel_map.map[6] = PA_CHANNEL_POSITION_SIDE_LEFT; + channel_map.map[7] = PA_CHANNEL_POSITION_SIDE_RIGHT; + } + ss.channels = channel_map.channels; + int err; - this->connection = pa_simple_new(NULL, "RPCS3", PA_STREAM_PLAYBACK, NULL, "Game", &ss, NULL, NULL, &err); + this->connection = pa_simple_new(NULL, "RPCS3", PA_STREAM_PLAYBACK, NULL, "Game", &ss, &channel_map, NULL, &err); if(!this->connection) { fprintf(stderr, "PulseAudio: Failed to initialize audio: %s\n", pa_strerror(err)); }