summaryrefslogtreecommitdiff
path: root/src/Z2AudioCS/SpkMixingBuffer.cpp
diff options
context:
space:
mode:
authorMax Roncace <me@caseif.net>2026-02-20 05:53:27 -0500
committerGitHub <noreply@github.com>2026-02-20 02:53:27 -0800
commit803bc041c7e228e2b7c88afd1121550e51db3f82 (patch)
tree5462e8061bc8a8084db8ea2fc677a0fef5bb16d1 /src/Z2AudioCS/SpkMixingBuffer.cpp
parent0558bde1e61374f5a1b54453f07fe6cc15525bc1 (diff)
Implement Z2AudioCS (#3103)
Diffstat (limited to 'src/Z2AudioCS/SpkMixingBuffer.cpp')
-rw-r--r--src/Z2AudioCS/SpkMixingBuffer.cpp51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/Z2AudioCS/SpkMixingBuffer.cpp b/src/Z2AudioCS/SpkMixingBuffer.cpp
new file mode 100644
index 0000000000..3118f07f94
--- /dev/null
+++ b/src/Z2AudioCS/SpkMixingBuffer.cpp
@@ -0,0 +1,51 @@
+#include "Z2AudioCS/SpkMixingBuffer.h"
+
+#include "Z2AudioCS/SpkSound.h"
+#include "JSystem/JAudio2/JASCalc.h"
+#include "JSystem/JAudio2/JASGadget.h"
+#include "JSystem/JAudio2/JASHeapCtrl.h"
+
+SpkMixingBuffer::SpkMixingBuffer(JKRHeap* heap) {
+ JUT_ASSERT(25, heap);
+ for (s32 chan = 0; chan < ARRAY_SIZE(mBuffer); chan++) {
+ mBuffer[chan] = new (heap, 0) s16[cSamplesPerAudioPacket];
+ JUT_ASSERT(29, mBuffer[chan]);
+ bzeroBuffer(chan);
+ }
+}
+
+void SpkMixingBuffer::mix(s32 chan, s16* src, s32 len, f32 weight,
+ s32 offset) {
+ JUT_ASSERT(61, chan < 4);
+ JUT_ASSERT(62, mBuffer[chan]);
+ JUT_ASSERT(63, src);
+ JUT_ASSERT(64, offset >= 0);
+ JUT_ASSERT(65, (offset+len) <= cSamplesPerAudioPacket);
+
+ for (s32 i = 0; i < len; i++) {
+ s32 sample = mBuffer[chan][i + offset];
+ s16 srcSample = src[i];
+ sample += (s32)(srcSample * weight);
+ mBuffer[chan][i + offset] = JASCalc::clamp<s16, s32>(sample);
+ }
+}
+
+s16* SpkMixingBuffer::getSamples(s32 chan) const {
+ JUT_ASSERT(97, chan < 4);
+ JUT_ASSERT(98, mBuffer[chan]);
+ return mBuffer[chan];
+}
+
+bool SpkMixingBuffer::update(s32 chan) {
+ bzeroBuffer(chan);
+ SpkSoundHolder* sound_holder = JASGlobalInstance<SpkSoundHolder>::getInstance();
+ JUT_ASSERT(121, sound_holder);
+ bool result = sound_holder->update(chan);
+ return result;
+}
+
+void SpkMixingBuffer::bzeroBuffer(s32 chan) {
+ JUT_ASSERT(143, chan < 4);
+ JUT_ASSERT(144, mBuffer[chan]);
+ JASCalc::bzero(mBuffer[chan], cSamplesPerAudioPacket * sizeof(s16));
+}