summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/audio_core/command_generator.cpp22
-rw-r--r--src/audio_core/delay_line.cpp21
-rw-r--r--src/audio_core/delay_line.h4
3 files changed, 25 insertions, 22 deletions
diff --git a/src/audio_core/command_generator.cpp b/src/audio_core/command_generator.cpp
index 90d8f90d3..2e2b296b0 100644
--- a/src/audio_core/command_generator.cpp
+++ b/src/audio_core/command_generator.cpp
@@ -2,6 +2,7 @@
2// Licensed under GPLv2 or any later version 2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included. 3// Refer to the license.txt file included.
4 4
5#include <cmath>
5#include <numbers> 6#include <numbers>
6#include "audio_core/algorithm/interpolate.h" 7#include "audio_core/algorithm/interpolate.h"
7#include "audio_core/command_generator.h" 8#include "audio_core/command_generator.h"
@@ -127,7 +128,7 @@ constexpr std::array<std::size_t, 20> REVERB_TAP_INDEX_6CH{4, 0, 0, 1, 1, 1, 1,
127 1, 1, 1, 0, 0, 0, 0, 3, 3, 3}; 128 1, 1, 1, 0, 0, 0, 0, 3, 3, 3};
128 129
129template <std::size_t CHANNEL_COUNT> 130template <std::size_t CHANNEL_COUNT>
130void ApplyReverbGeneric(const I3dl2ReverbParams& info, I3dl2ReverbState& state, 131void ApplyReverbGeneric(I3dl2ReverbState& state,
131 const std::array<const s32*, AudioCommon::MAX_CHANNEL_COUNT>& input, 132 const std::array<const s32*, AudioCommon::MAX_CHANNEL_COUNT>& input,
132 const std::array<s32*, AudioCommon::MAX_CHANNEL_COUNT>& output, 133 const std::array<s32*, AudioCommon::MAX_CHANNEL_COUNT>& output,
133 s32 sample_count) { 134 s32 sample_count) {
@@ -567,16 +568,16 @@ void CommandGenerator::GenerateI3dl2ReverbEffectCommand(s32 mix_buffer_offset, E
567 if (enabled) { 568 if (enabled) {
568 switch (channel_count) { 569 switch (channel_count) {
569 case 1: 570 case 1:
570 ApplyReverbGeneric<1>(params, state, input, output, worker_params.sample_count); 571 ApplyReverbGeneric<1>(state, input, output, worker_params.sample_count);
571 break; 572 break;
572 case 2: 573 case 2:
573 ApplyReverbGeneric<2>(params, state, input, output, worker_params.sample_count); 574 ApplyReverbGeneric<2>(state, input, output, worker_params.sample_count);
574 break; 575 break;
575 case 4: 576 case 4:
576 ApplyReverbGeneric<4>(params, state, input, output, worker_params.sample_count); 577 ApplyReverbGeneric<4>(state, input, output, worker_params.sample_count);
577 break; 578 break;
578 case 6: 579 case 6:
579 ApplyReverbGeneric<6>(params, state, input, output, worker_params.sample_count); 580 ApplyReverbGeneric<6>(state, input, output, worker_params.sample_count);
580 break; 581 break;
581 } 582 }
582 } else { 583 } else {
@@ -794,8 +795,8 @@ void CommandGenerator::UpdateI3dl2Reverb(I3dl2ReverbParams& info, I3dl2ReverbSta
794 state.lowpass_1 = 0.0f; 795 state.lowpass_1 = 0.0f;
795 } else { 796 } else {
796 const auto a = 1.0f - hf_gain; 797 const auto a = 1.0f - hf_gain;
797 const auto b = 798 const auto b = 2.0f * (1.0f - hf_gain * CosD(256.0f * info.hf_reference /
798 2.0f * (1.0f - hf_gain * CosD(256.0f * info.hf_reference / info.sample_rate)); 799 static_cast<f32>(info.sample_rate)));
799 const auto c = std::sqrt(b * b - 4.0f * a * a); 800 const auto c = std::sqrt(b * b - 4.0f * a * a);
800 801
801 state.lowpass_1 = (b - c) / (2.0f * a); 802 state.lowpass_1 = (b - c) / (2.0f * a);
@@ -815,10 +816,11 @@ void CommandGenerator::UpdateI3dl2Reverb(I3dl2ReverbParams& info, I3dl2ReverbSta
815 state.decay_delay_line0[i].GetDelay() + 816 state.decay_delay_line0[i].GetDelay() +
816 state.decay_delay_line1[i].GetDelay(); 817 state.decay_delay_line1[i].GetDelay();
817 818
818 float a = (-60.0f * delay_sample_counts) / (info.decay_time * info.sample_rate); 819 float a = (-60.0f * static_cast<f32>(delay_sample_counts)) /
820 (info.decay_time * static_cast<f32>(info.sample_rate));
819 float b = a / info.hf_decay_ratio; 821 float b = a / info.hf_decay_ratio;
820 float c = CosD(128.0f * 0.5f * info.hf_reference / info.sample_rate) / 822 float c = CosD(128.0f * 0.5f * info.hf_reference / static_cast<f32>(info.sample_rate)) /
821 SinD(128.0f * 0.5f * info.hf_reference / info.sample_rate); 823 SinD(128.0f * 0.5f * info.hf_reference / static_cast<f32>(info.sample_rate));
822 float d = Pow10((b - a) / 40.0f); 824 float d = Pow10((b - a) / 40.0f);
823 float e = Pow10((b + a) / 40.0f) * 0.7071f; 825 float e = Pow10((b + a) / 40.0f) * 0.7071f;
824 826
diff --git a/src/audio_core/delay_line.cpp b/src/audio_core/delay_line.cpp
index c8bc6e23e..f4e4dd8d2 100644
--- a/src/audio_core/delay_line.cpp
+++ b/src/audio_core/delay_line.cpp
@@ -1,15 +1,16 @@
1#include <cstring>
1#include "audio_core/delay_line.h" 2#include "audio_core/delay_line.h"
2 3
3namespace AudioCore { 4namespace AudioCore {
4DelayLineBase::DelayLineBase() = default; 5DelayLineBase::DelayLineBase() = default;
5DelayLineBase::~DelayLineBase() = default; 6DelayLineBase::~DelayLineBase() = default;
6 7
7void DelayLineBase::Initialize(s32 _max_delay, float* src_buffer) { 8void DelayLineBase::Initialize(s32 max_delay_, float* src_buffer) {
8 buffer = src_buffer; 9 buffer = src_buffer;
9 buffer_end = buffer + _max_delay; 10 buffer_end = buffer + max_delay_;
10 max_delay = _max_delay; 11 max_delay = max_delay_;
11 output = buffer; 12 output = buffer;
12 SetDelay(_max_delay); 13 SetDelay(max_delay_);
13 Clear(); 14 Clear();
14} 15}
15 16
@@ -30,7 +31,7 @@ s32 DelayLineBase::GetMaxDelay() const {
30} 31}
31 32
32f32 DelayLineBase::TapOut(s32 last_sample) { 33f32 DelayLineBase::TapOut(s32 last_sample) {
33 float* ptr = input - (last_sample + 1); 34 const float* ptr = input - (last_sample + 1);
34 if (ptr < buffer) { 35 if (ptr < buffer) {
35 ptr += (max_delay + 1); 36 ptr += (max_delay + 1);
36 } 37 }
@@ -81,13 +82,13 @@ void DelayLineBase::Reset() {
81DelayLineAllPass::DelayLineAllPass() = default; 82DelayLineAllPass::DelayLineAllPass() = default;
82DelayLineAllPass::~DelayLineAllPass() = default; 83DelayLineAllPass::~DelayLineAllPass() = default;
83 84
84void DelayLineAllPass::Initialize(u32 delay, float _coeffcient, f32* src_buffer) { 85void DelayLineAllPass::Initialize(u32 delay_, float coeffcient_, f32* src_buffer) {
85 DelayLineBase::Initialize(delay, src_buffer); 86 DelayLineBase::Initialize(delay_, src_buffer);
86 SetCoefficient(_coeffcient); 87 SetCoefficient(coeffcient_);
87} 88}
88 89
89void DelayLineAllPass::SetCoefficient(float _coeffcient) { 90void DelayLineAllPass::SetCoefficient(float coeffcient_) {
90 coefficient = _coeffcient; 91 coefficient = coeffcient_;
91} 92}
92 93
93f32 DelayLineAllPass::Tick(f32 sample) { 94f32 DelayLineAllPass::Tick(f32 sample) {
diff --git a/src/audio_core/delay_line.h b/src/audio_core/delay_line.h
index b6a6e0b12..420b71cdb 100644
--- a/src/audio_core/delay_line.h
+++ b/src/audio_core/delay_line.h
@@ -35,8 +35,8 @@ public:
35 DelayLineAllPass(); 35 DelayLineAllPass();
36 ~DelayLineAllPass(); 36 ~DelayLineAllPass();
37 37
38 void Initialize(u32 delay, float _coeffcient, f32* src_buffer); 38 void Initialize(u32 delay, float coeffcient_, f32* src_buffer);
39 void SetCoefficient(float _coeffcient); 39 void SetCoefficient(float coeffcient_);
40 f32 Tick(f32 sample); 40 f32 Tick(f32 sample);
41 void Reset(); 41 void Reset();
42 42