mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-05-30 16:35:26 -04:00
15732e241c
* 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
52 lines
1.6 KiB
C++
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));
|
|
}
|