Skip to content
This repository was archived by the owner on Nov 8, 2025. It is now read-only.
/ Re-Nooice Public archive

Commit 503f14c

Browse files
committed
One less ringbuffer
Signed-off-by: falkTX <falktx@falktx.com>
1 parent ce8a32b commit 503f14c

File tree

2 files changed

+31
-31
lines changed

2 files changed

+31
-31
lines changed

Makefile

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,11 @@ endif
2626
# ---------------------------------------------------------------------------------------------------------------------
2727
# auto-download model files
2828

29-
models: deps/rnnoise/src/rnnoise_data.h
29+
models:
30+
# deps/rnnoise/src/rnnoise_data.h
3031

31-
deps/rnnoise/src/rnnoise_data.h:
32-
cd deps/rnnoise && sh download_model.sh
32+
# deps/rnnoise/src/rnnoise_data.h:
33+
# cd deps/rnnoise && sh download_model.sh
3334

3435
# ---------------------------------------------------------------------------------------------------------------------
3536

src/PluginDSP.cpp

Lines changed: 27 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
#include "DistrhoPlugin.hpp"
88
#include "extra/RingBuffer.hpp"
99

10+
#include <cassert>
11+
1012
#include "rnnoise.h"
1113

1214
START_NAMESPACE_DISTRHO
@@ -22,9 +24,9 @@ class ReNooicePlugin : public Plugin
2224
float* const bufferIn = new float[denoiseFrameSize];
2325
float* const bufferOut = new float[denoiseFrameSize];
2426

25-
HeapRingBuffer ringBufferIn;
2627
HeapRingBuffer ringBufferOut;
2728

29+
uint32_t bufferInPos = 0;
2830
bool processing = false;
2931

3032
enum Parameters {
@@ -141,35 +143,18 @@ class ReNooicePlugin : public Plugin
141143

142144
void activate() override
143145
{
144-
const uint32_t ringBufferSize = denoiseFrameSize * 3 * sizeof(float);
145-
ringBufferIn.createBuffer(ringBufferSize);
146+
const uint32_t ringBufferSize = denoiseFrameSize * 2 * sizeof(float);
146147
ringBufferOut.createBuffer(ringBufferSize);
147-
processing = false;
148148
parameters[kParamCurVAD] = parameters[kParamMaxVAD] = 0.f;
149+
processing = false;
150+
bufferInPos = 0;
149151
}
150152

151153
void deactivate() override
152154
{
153-
ringBufferIn.deleteBuffer();
154155
ringBufferOut.deleteBuffer();
155156
}
156157

157-
void runDenoise()
158-
{
159-
// extract input data from ringbuffer
160-
ringBufferIn.readCustomData(bufferIn, denoiseFrameSize * sizeof(float));
161-
162-
// run denoise
163-
parameters[kParamCurVAD] = rnnoise_process_frame(denoise, bufferOut, bufferIn);
164-
165-
if (parameters[kParamCurVAD] > parameters[kParamMaxVAD])
166-
parameters[kParamMaxVAD] = parameters[kParamCurVAD];
167-
168-
// write denoise output into ringbuffer
169-
ringBufferOut.writeCustomData(bufferOut, denoiseFrameSize * sizeof(float));
170-
ringBufferOut.commitWrite();
171-
}
172-
173158
/**
174159
Run/process function for plugins without MIDI input.
175160
@note Some parameters might be null if there are no audio inputs or outputs.
@@ -181,22 +166,36 @@ class ReNooicePlugin : public Plugin
181166

182167
for (uint32_t offset = 0; offset != frames;)
183168
{
184-
const uint32_t framesCycle = std::min(denoiseFrameSize, frames - offset);
169+
const uint32_t framesCycle = std::min(denoiseFrameSize - bufferInPos, frames - offset);
170+
171+
// copy input data into buffer
172+
std::memcpy(bufferIn + bufferInPos, input + offset, framesCycle * sizeof(float));
185173

186-
// write input data into ringbuffer
187-
ringBufferIn.writeCustomData(input + offset, framesCycle * sizeof(float));
188-
ringBufferIn.commitWrite();
174+
bufferInPos += framesCycle;
175+
assert(bufferInPos <= denoiseFrameSize);
176+
177+
// run denoise once input buffer is full
178+
if (bufferInPos == denoiseFrameSize)
179+
{
180+
bufferInPos = 0;
189181

190-
if (ringBufferIn.getReadableDataSize() / sizeof(float) >= denoiseFrameSize)
191-
runDenoise();
182+
parameters[kParamCurVAD] = rnnoise_process_frame(denoise, bufferOut, bufferIn);
183+
184+
if (parameters[kParamCurVAD] > parameters[kParamMaxVAD])
185+
parameters[kParamMaxVAD] = parameters[kParamCurVAD];
186+
187+
// write denoise output into ringbuffer
188+
ringBufferOut.writeCustomData(bufferOut, denoiseFrameSize * sizeof(float));
189+
ringBufferOut.commitWrite();
190+
}
192191

193192
if (processing)
194193
{
195194
ringBufferOut.readCustomData(output + offset, framesCycle * sizeof(float));
196195
}
197196
else
198197
{
199-
std::memset(output + offset, 0, sizeof(float) * framesCycle);
198+
std::memset(output + offset, 0, framesCycle * sizeof(float));
200199

201200
if (ringBufferOut.getReadableDataSize() / sizeof(float) >= denoiseFrameSize)
202201
processing = true;

0 commit comments

Comments
 (0)