launcher: Raise DualSense speaker volume range for SpeakerFX (#1043)

controller: restore speaker midpoint and raise volume ceiling
This commit is contained in:
Pyxellator
2026-10-04 17:48:25 +02:00
committed by GitHub
parent c885da0a3f
commit 719e02574a
7 changed files with 40 additions and 18 deletions
+19 -2
View File
@@ -112,7 +112,7 @@ struct Controller {
Initialize();
Connect(1);
Check(GetSettingScale(Setting::SpeakerVolume) ==
Config::GetControllerSpeakerVolume() / 100.0f &&
Config::GetControllerSpeakerVolume() / 50.0f &&
GetSettingScale(Setting::VibrationIntensity) ==
Config::GetControllerVibrationIntensity() / 100.0f &&
GetSettingScale(Setting::TriggerEffectIntensity) == 1.0f,
@@ -165,7 +165,7 @@ void TestSettingCycles() {
void TestGlobalControllerLevels() {
Config::ConfigOptions options;
options.controller_speaker_volume = 50;
options.controller_speaker_volume = 25;
options.controller_vibration_intensity = 25;
Config::Load(options);
{
@@ -190,6 +190,23 @@ void TestGlobalControllerLevels() {
Check(rumble.back().large == 17 * 257 && rumble.back().small == 8 * 257,
"cycling vibration did not apply the combined intensity to cached rumble");
}
options.controller_speaker_volume = 50;
Config::Load(options);
{
Controller controller;
Check(GetSettingScale(Setting::SpeakerVolume) == 1.0f,
"speaker midpoint did not preserve the previous default level");
}
options.controller_speaker_volume = 100;
Config::Load(options);
{
Controller controller;
Check(GetSettingScale(Setting::SpeakerVolume) == 2.0f,
"speaker maximum did not add 6 dB of gain");
CycleSetting(Setting::SpeakerVolume);
Check(GetSettingScale(Setting::SpeakerVolume) == 0.0f,
"speaker maximum prevented the hotkey from muting");
}
options.controller_speaker_volume = 0;
options.controller_vibration_intensity = 0;
Config::Load(options);
+7 -4
View File
@@ -1148,6 +1148,9 @@ void TestAudioSpeakerRouting() {
speaker_scale = 0.5f;
audio.AudioOutOutputs(&output, 1, false);
ExpectPcm({0.25f, 0.25f, 0, 0, 0.25f, 0.25f, 0, 0});
speaker_scale = 2.0f;
audio.AudioOutOutputs(&output, 1, false);
ExpectPcm({1.0f, 1.0f, 0, 0, 1.0f, 1.0f, 0, 0});
speaker_scale = 0.0f;
audio.AudioOutOutputs(&output, 1, false);
ExpectPcm({});
@@ -1165,7 +1168,7 @@ void TestAudioFallbackGain() {
Fixture f;
Libs::Audio::Audio audio;
active_controller = 2;
speaker_scale = 0.5f;
speaker_scale = 2.0f;
const std::array<int16_t, 4> integer_pcm {16384, 16384, 16384, 16384};
const auto format = is_float ? Libs::Audio::Audio::Format::FloatStereo
: Libs::Audio::Audio::Format::Signed16bitStereo;
@@ -1176,7 +1179,7 @@ void TestAudioFallbackGain() {
audio.AudioOutSetVolume(port, 3, volume.data());
Libs::Audio::Audio::OutputParam output {port, data};
audio.AudioOutOutputs(&output, 1, false);
const float expected = type == 4 ? 0.125f : 0.25f;
const float expected = type == 4 ? 0.5f : 0.25f;
std::array<float, 4> actual {};
if (is_float) {
Check(SDL_GetAudioStreamData(default_stream, actual.data(), sizeof(actual)) ==
@@ -1231,14 +1234,14 @@ void TestBluetoothAudioSpeakerRouting() {
const auto port = audio.AudioOutOpen(4, 1024, 48000, Libs::Audio::Audio::Format::FloatStereo);
Check(port.IsValid() && default_stream != nullptr, "Bluetooth pad speaker port did not open");
std::vector<float> sound(2048, 0.25f);
speaker_scale = 0.5f;
speaker_scale = 2.0f;
Libs::Audio::Audio::OutputParam output {port, sound.data()};
Check(audio.AudioOutOutputs(&output, 1, false) == 1024 && hid_opens == 1 &&
SDL_GetAudioStreamQueued(default_stream) == 0,
"Bluetooth pad speaker also played on the host output");
fail_hid_write = true;
auto pending = Libs::Controller::DualSenseBluetooth::Prepare(now * 1000000);
Check(pending.size() == 1 && std::abs(pending[0].audio[200] - 0.125f) < 1e-4f,
Check(pending.size() == 1 && std::abs(pending[0].audio[200] - 0.5f) < 1e-4f,
"Bluetooth speaker did not apply its setting gain");
Libs::Controller::DualSenseBluetooth::Send(pending);
Check(audio.AudioOutOutputs(&output, 1, false) == 1024 &&