summaryrefslogtreecommitdiff
path: root/Source/Core/AudioCommon/Mixer.cpp
diff options
context:
space:
mode:
authorCySlaytor <cyslaytor@gmail.com>2026-11-01 01:29:01 +0000
committerCySlaytor <cyslaytor@gmail.com>2026-11-01 01:29:01 +0000
commit56076f403dc8fc3a560e4b6c0811fba3d49ad880 (patch)
treebdb7a6d19a6449cc3cc8d6131ceb6ead7a360a1a /Source/Core/AudioCommon/Mixer.cpp
parent3eb30c7620b4475b2e0404228ba0d2b238a132f1 (diff)
feat(retroachievements): implement achievement notification sounds
Diffstat (limited to 'Source/Core/AudioCommon/Mixer.cpp')
-rw-r--r--Source/Core/AudioCommon/Mixer.cpp19
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),