mixer: use the buffer directly, do not copy

pull/955/head
Gergo Koteles 1 week ago
parent b0e7f24c1a
commit 952a7b776f
  1. 14
      src/effect_mixer.hpp
  2. 22
      src/minidexed.cpp

@ -168,6 +168,20 @@ public:
arm_fill_f32(0.0f, sumbufR, buffer_length); arm_fill_f32(0.0f, sumbufR, buffer_length);
} }
void getBuffers(float32_t (*buffers[2]))
{
buffers[0] = sumbufL;
buffers[1] = sumbufR;
}
void zeroFill()
{
if(sumbufL)
arm_fill_f32(0.0f, sumbufL, buffer_length);
if(sumbufR)
arm_fill_f32(0.0f, sumbufR, buffer_length);
}
protected: protected:
using AudioMixer<NN>::sumbufL; using AudioMixer<NN>::sumbufL;
using AudioMixer<NN>::multiplier; using AudioMixer<NN>::multiplier;

@ -1406,25 +1406,28 @@ void CMiniDexed::ProcessSound (void)
if(nMasterVolume > 0.0) if(nMasterVolume > 0.0)
{ {
// get the mix buffer of all TGs
float32_t (*SampleBuffer[2]);
tg_mixer->getBuffers(SampleBuffer);
tg_mixer->zeroFill();
for (uint8_t i = 0; i < m_nToneGenerators; i++) for (uint8_t i = 0; i < m_nToneGenerators; i++)
{ {
tg_mixer->doAddMix(i,m_OutputLevel[i]); tg_mixer->doAddMix(i,m_OutputLevel[i]);
} }
// END TG mixing // END TG mixing
// BEGIN create SampleBuffer for holding audio data
float32_t SampleBuffer[2][nFrames];
// END create SampleBuffer for holding audio data
// get the mix of all TGs
tg_mixer->getMix(SampleBuffer[indexL], SampleBuffer[indexR]);
// BEGIN adding reverb // BEGIN adding reverb
if (m_nParameter[ParameterReverbEnable]) if (m_nParameter[ParameterReverbEnable])
{ {
float32_t ReverbBuffer[2][nFrames]; float32_t ReverbBuffer[2][nFrames];
float32_t ReverbSendBuffer[2][nFrames];
float32_t (*ReverbSendBuffer[2]);
reverb_send_mixer->getBuffers(ReverbSendBuffer);
reverb_send_mixer->zeroFill();
for (uint8_t i = 0; i < m_nToneGenerators; i++) for (uint8_t i = 0; i < m_nToneGenerators; i++)
{ {
reverb_send_mixer->doAddMix(i,m_OutputLevel[i]); reverb_send_mixer->doAddMix(i,m_OutputLevel[i]);
@ -1432,7 +1435,6 @@ void CMiniDexed::ProcessSound (void)
m_ReverbSpinLock.Acquire (); m_ReverbSpinLock.Acquire ();
reverb_send_mixer->getMix(ReverbSendBuffer[indexL], ReverbSendBuffer[indexR]);
reverb->doReverb(ReverbSendBuffer[indexL],ReverbSendBuffer[indexR],ReverbBuffer[indexL], ReverbBuffer[indexR],nFrames); reverb->doReverb(ReverbSendBuffer[indexL],ReverbSendBuffer[indexR],ReverbBuffer[indexL], ReverbBuffer[indexR],nFrames);
// scale down and add left reverb buffer by reverb level // scale down and add left reverb buffer by reverb level

Loading…
Cancel
Save