mirror of
https://github.com/open-goal/jak-project
synced 2026-05-30 00:47:20 -04:00
60db0e5ef9
This updates `fmt` to the latest version and moves to just being a copy of their repo to make updating easier (no editing their cmake / figuring out which files to minimally include). The motivation for this is now that we switched to C++ 20, there were a ton of deprecated function usages that is going away in future compiler versions. This gets rid of all those warnings.
38 lines
742 B
C++
38 lines
742 B
C++
// Copyright: 2021 - 2024, Ziemas
|
|
// SPDX-License-Identifier: ISC
|
|
#include "synth.h"
|
|
|
|
#include <stdexcept>
|
|
|
|
namespace snd {
|
|
|
|
static s16 ApplyVolume(s16 sample, s32 volume) {
|
|
return (sample * volume) >> 15;
|
|
}
|
|
|
|
s16Output Synth::Tick() {
|
|
s16Output out{};
|
|
|
|
mVoices.remove_if([](std::shared_ptr<Voice>& v) { return v->Dead(); });
|
|
for (auto& v : mVoices) {
|
|
out += v->Run();
|
|
}
|
|
|
|
out.left = ApplyVolume(out.left, mVolume.left.Get());
|
|
out.right = ApplyVolume(out.right, mVolume.right.Get());
|
|
|
|
mVolume.Run();
|
|
|
|
return out;
|
|
}
|
|
|
|
void Synth::AddVoice(std::shared_ptr<Voice> voice) {
|
|
mVoices.emplace_front(voice);
|
|
}
|
|
|
|
void Synth::SetMasterVol(u32 volume) {
|
|
mVolume.left.Set(volume);
|
|
mVolume.right.Set(volume);
|
|
}
|
|
} // namespace snd
|