Files
dusklight/src/Z2AudioCS/SpkMixingBuffer.cpp
T
Pieter-Jan Briers 15732e241c Pjb dev 3 (#48)
* Undo array allocation changes from #43

Doesn't work

* Expand dmeter heap sizes, give names

* Fix manual operator delete call in resource.cpp

* Disable map rendering for now

Aurora can't handle lines

* Re-enable assert heap on DVD thread

Should be fine?

* Some basic debug groups with the new Aurora API

* Allow Aurora backend to be set via CLI

* Give materials debug groups

* More debug groups

* JKRHeap separation: array edition

Pain
2026-03-11 13:40:21 -07:00

52 lines
1.6 KiB
C++

#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] = JKR_NEW_ARRAY_ARGS(s16, cSamplesPerAudioPacket, heap, 0);
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));
}