Skip to content

Commit 467e599

Browse files
committed
fix: crack noise
1 parent 0991e05 commit 467e599

File tree

2 files changed

+13
-8
lines changed

2 files changed

+13
-8
lines changed

packages/react-native-audio-api/common/cpp/audioapi/core/effects/IIRFilterNode.cpp

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ IIRFilterNode::IIRFilterNode(
4141
int maxChannels = 32; // TODO: magic number, jaki jest faktyczy Channels?
4242
xBuffers_.resize(maxChannels);
4343
yBuffers_.resize(maxChannels);
44+
bufferIndices.resize(maxChannels, 0);
4445

4546
for (int c = 0; c < maxChannels; ++c) {
4647
xBuffers_[c].resize(bufferLength, 0.0f);
@@ -128,34 +129,37 @@ std::shared_ptr<AudioBus> IIRFilterNode::processNode(
128129
int mask = bufferLength - 1;
129130

130131
for (int c = 0; c < numChannels; ++c) {
131-
// for (int c = 0; c < 1; ++c) {
132132
auto channelData = processingBus->getChannel(c)->getData();
133-
// auto channelData2 = processingBus->getChannel(1)->getData();
134133
auto &x = xBuffers_[c];
135134
auto &y = yBuffers_[c];
135+
size_t bufferIndex = bufferIndices[c];
136136

137137
for (int n = 0; n < framesToProcess; ++n) {
138138
float yn = feedforward_[0] * channelData[n];
139139

140140
for (int k = 1; k < minLength; ++k) {
141-
int m = (n - k) & mask;
141+
int m = (bufferIndex - k) & mask;
142142
yn += feedforward_[k] * x[m];
143143
yn -= feedback_[k] * y[m];
144+
// yn = std::fma(feedforward_[k], x[m], yn);
145+
// yn = std::fma(-feedback_[k], y[m], yn);
144146
}
145147

146148
for (int k = minLength; k < feedforwardLength; ++k) {
147-
yn += feedforward_[k] * x[(n - k) & mask];
149+
yn += feedforward_[k] * x[(bufferIndex - k) & mask];
148150
}
149151
for (int k = minLength; k < feedbackLength; ++k) {
150-
yn -= feedback_[k] * y[(n - k) & mask];
152+
yn -= feedback_[k] * y[(bufferIndex - k) & (bufferLength - 1)];
151153
}
152154

153155
channelData[n] = yn;
154-
// channelData2[n] = yn;
155156

156-
x[n & mask] = channelData[n];
157-
y[n & mask] = yn;
157+
x[bufferIndex] = channelData[n];
158+
y[bufferIndex] = yn;
159+
160+
bufferIndex = (bufferIndex + 1) & (bufferLength - 1);
158161
}
162+
bufferIndices[c] = bufferIndex;
159163
}
160164
return processingBus;
161165
}

packages/react-native-audio-api/common/cpp/audioapi/core/effects/IIRFilterNode.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ class IIRFilterNode : public AudioNode {
6161

6262
std::vector<std::vector<float>> xBuffers_; // xBuffers_[channel][index]
6363
std::vector<std::vector<float>> yBuffers_;
64+
std::vector<size_t> bufferIndices;
6465

6566
static std::complex<float> evaluatePolynomial(
6667
const std::vector<float> coefficients,

0 commit comments

Comments
 (0)