summaryrefslogtreecommitdiff
path: root/src/audio_core/common.h
diff options
context:
space:
mode:
authorGravatar bunnei2021-02-14 20:09:15 -0800
committerGravatar GitHub2021-02-14 20:09:15 -0800
commit8378b8a61feb971fc4b8af8468938e4691c2cfb7 (patch)
tree6df36c0a553a72ad4ec5dca2a5134b44d0f31849 /src/audio_core/common.h
parentMerge pull request #5920 from bunnei/am-ldn-fix (diff)
parentrevert to std::sin and std::cos (diff)
downloadyuzu-8378b8a61feb971fc4b8af8468938e4691c2cfb7.tar.gz
yuzu-8378b8a61feb971fc4b8af8468938e4691c2cfb7.tar.xz
yuzu-8378b8a61feb971fc4b8af8468938e4691c2cfb7.zip
Merge pull request #5909 from ogniK5377/I3dl2Reverb
audren: Implement I3dl2Reverb
Diffstat (limited to 'src/audio_core/common.h')
-rw-r--r--src/audio_core/common.h23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/audio_core/common.h b/src/audio_core/common.h
index ec59a3ba9..fe546c55d 100644
--- a/src/audio_core/common.h
+++ b/src/audio_core/common.h
@@ -33,6 +33,29 @@ constexpr std::size_t TEMP_MIX_BASE_SIZE = 0x3f00; // TODO(ogniK): Work out this
33// and our const ends up being 0x3f04, the 4 bytes are most 33// and our const ends up being 0x3f04, the 4 bytes are most
34// likely the sample history 34// likely the sample history
35constexpr std::size_t TOTAL_TEMP_MIX_SIZE = TEMP_MIX_BASE_SIZE + AudioCommon::MAX_SAMPLE_HISTORY; 35constexpr std::size_t TOTAL_TEMP_MIX_SIZE = TEMP_MIX_BASE_SIZE + AudioCommon::MAX_SAMPLE_HISTORY;
36constexpr f32 I3DL2REVERB_MAX_LEVEL = 5000.0f;
37constexpr f32 I3DL2REVERB_MIN_REFLECTION_DURATION = 0.02f;
38constexpr std::size_t I3DL2REVERB_TAPS = 20;
39constexpr std::size_t I3DL2REVERB_DELAY_LINE_COUNT = 4;
40using Fractional = s32;
41
42template <typename T>
43constexpr Fractional ToFractional(T x) {
44 return static_cast<Fractional>(x * static_cast<T>(0x4000));
45}
46
47constexpr Fractional MultiplyFractional(Fractional lhs, Fractional rhs) {
48 return static_cast<Fractional>(static_cast<s64>(lhs) * rhs >> 14);
49}
50
51constexpr s32 FractionalToFixed(Fractional x) {
52 const auto s = x & (1 << 13);
53 return static_cast<s32>(x >> 14) + s;
54}
55
56constexpr s32 CalculateDelaySamples(s32 sample_rate_khz, float time) {
57 return FractionalToFixed(MultiplyFractional(ToFractional(sample_rate_khz), ToFractional(time)));
58}
36 59
37static constexpr u32 VersionFromRevision(u32_le rev) { 60static constexpr u32 VersionFromRevision(u32_le rev) {
38 // "REV7" -> 7 61 // "REV7" -> 7