Просмотр исходного кода

Fix a bug with the Reverb command in reading from the pre_delay line.

Kelebek1 3 лет назад
Родитель
Сommit
104cb6aa0a

+ 2 - 1
src/audio_core/renderer/command/effect/reverb.cpp

@@ -308,7 +308,8 @@ static void ApplyReverbEffect(const ReverbInfo::ParameterVersion2& params, Rever
         }
 
         Common::FixedPoint<50, 14> pre_delay_sample{
-            state.pre_delay_line.Read() * Common::FixedPoint<50, 14>::from_base(params.late_gain)};
+            state.pre_delay_line.TapOut(state.pre_delay_time) *
+            Common::FixedPoint<50, 14>::from_base(params.late_gain)};
 
         std::array<Common::FixedPoint<50, 14>, ReverbInfo::MaxDelayLines> mix_matrix{
             state.prev_feedback_output[2] + state.prev_feedback_output[1] + pre_delay_sample,

+ 2 - 1
src/audio_core/renderer/effect/i3dl2.h

@@ -104,7 +104,8 @@ public:
         }
 
         void Write(const Common::FixedPoint<50, 14> sample) {
-            *(input++) = sample;
+            *input = sample;
+            input++;
             if (input >= buffer_end) {
                 input = buffer.data();
             }

+ 4 - 4
src/audio_core/renderer/effect/reverb.h

@@ -79,12 +79,10 @@ public:
                 return;
             }
             sample_count = delay_time;
-            input = &buffer[(output - buffer.data() + sample_count) % (sample_count_max + 1)];
+            input = &buffer[0];
         }
 
         Common::FixedPoint<50, 14> Tick(const Common::FixedPoint<50, 14> sample) {
-            Write(sample);
-
             auto out_sample{Read()};
 
             output++;
@@ -92,6 +90,7 @@ public:
                 output = buffer.data();
             }
 
+            Write(sample);
             return out_sample;
         }
 
@@ -100,7 +99,8 @@ public:
         }
 
         void Write(const Common::FixedPoint<50, 14> sample) {
-            *(input++) = sample;
+            *input = sample;
+            input++;
             if (input >= buffer_end) {
                 input = buffer.data();
             }