diff options
| author | iwubcode <iwubcode@users.noreply.github.com> | 2026-11-01 00:10:58 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-11-01 00:10:58 -0500 |
| commit | 86d554802d7560acf12b5c5a2b3acb344069b5ce (patch) | |
| tree | ccb7d75fb225d186b928d7a04e3164d28febcb85 /Source/Core/AudioCommon/Mixer.cpp | |
| parent | 613db73aeb2c086a816592df2fb193d73130101b (diff) | |
| parent | 56076f403dc8fc3a560e4b6c0811fba3d49ad880 (diff) | |
Merge pull request #14596 from CySlaytor/master
feat(retroachievements): implement achievement notification sounds
Diffstat (limited to 'Source/Core/AudioCommon/Mixer.cpp')
| -rw-r--r-- | Source/Core/AudioCommon/Mixer.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/Source/Core/AudioCommon/Mixer.cpp b/Source/Core/AudioCommon/Mixer.cpp index fe7f0e7349..e27fb3c488 100644 --- a/Source/Core/AudioCommon/Mixer.cpp +++ b/Source/Core/AudioCommon/Mixer.cpp @@ -176,6 +176,7 @@ std::size_t Mixer::Mix(s16* samples, std::size_t num_samples) m_wiimote_speaker_mixers[i].Mix(samples, num_samples); } m_skylander_portal_mixer.Mix(samples, num_samples); + m_achievement_mixer.Mix(samples, num_samples); for (std::size_t i = 0; i < m_gba_mixers.size(); ++i) { if (!m_config_gba_routing_enabled || !m_config_gba_output_enabled[i]) @@ -320,6 +321,18 @@ void Mixer::PushGBASamples(std::size_t device_number, const s16* samples, std::s } } +void Mixer::PushAchievementSamples(const s16* samples, std::size_t num_samples) +{ + if (!IsOutputSampleRateValid()) + return; + + // AchievementManager pushes host-endian LR-ordered stereo samples. + for (std::size_t i = 0; i != num_samples; ++i) + { + m_achievement_mixer.PushSample(samples[i * 2], samples[i * 2 + 1]); + } +} + std::size_t Mixer::MixGBA(std::size_t device_number, s16* samples, std::size_t num_samples) { if (!samples || device_number >= m_gba_mixers.size()) @@ -344,6 +357,12 @@ void Mixer::SetGBAInputSampleRate(std::size_t device_number, u32 sample_rate) m_gba_mixers[device_number].SetInputSampleRateDivisor(GBA_SAMPLE_RATE_DIVIDEND / sample_rate); } +void Mixer::SetAchievementSampleRate(u32 sample_rate) +{ + m_achievement_mixer.SetInputSampleRateDividend(sample_rate); + m_achievement_mixer.SetInputSampleRateDivisor(1); +} + void Mixer::SetStreamingVolume(u32 lvolume, u32 rvolume) { m_streaming_mixer.SetVolume(std::clamp<u32>(lvolume, 0x00, 0xff), |
