From 8d5ef2c7b919f48161c5d3d3663f59a6cd1ad53b Mon Sep 17 00:00:00 2001 From: Eladash Date: Tue, 19 Nov 2019 21:17:12 +0200 Subject: [PATCH] Clamp volume in cellAudioAdd/2c/6c/Data Same as firmware, NaN and Inf are flushed to zero. --- rpcs3/Emu/Cell/Modules/cellAudio.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/rpcs3/Emu/Cell/Modules/cellAudio.cpp b/rpcs3/Emu/Cell/Modules/cellAudio.cpp index 002f08196c..efad968642 100644 --- a/rpcs3/Emu/Cell/Modules/cellAudio.cpp +++ b/rpcs3/Emu/Cell/Modules/cellAudio.cpp @@ -1469,6 +1469,8 @@ error_code cellAudioAddData(u32 portNum, vm::ptr src, u32 samples, float lock.unlock(); + volume = std::isfinite(volume) ? std::clamp(volume, -16.f, 16.f) : 0.f; + for (u32 i = 0; i < samples * port.num_channels; i++) { dst[i] += src[i] * volume; // mix all channels @@ -1508,6 +1510,8 @@ error_code cellAudioAdd2chData(u32 portNum, vm::ptr src, u32 samples, flo lock.unlock(); + volume = std::isfinite(volume) ? std::clamp(volume, -16.f, 16.f) : 0.f; + if (port.num_channels == 2) { for (u32 i = 0; i < samples; i++) @@ -1574,6 +1578,8 @@ error_code cellAudioAdd6chData(u32 portNum, vm::ptr src, float volume) lock.unlock(); + volume = std::isfinite(volume) ? std::clamp(volume, -16.f, 16.f) : 0.f; + if (port.num_channels == 6) { for (u32 i = 0; i < 256; i++)