summaryrefslogtreecommitdiff
path: root/include/nw4r/snd/snd_FxReverbHi.h
blob: 5276774080c1bc865e4ba0047ce0997912fbdb37 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#ifndef NW4R_SND_FX_REVERB_HI_H
#define NW4R_SND_FX_REVERB_HI_H
#include "nw4r/snd/snd_AxfxImpl.h"
#include "nw4r/snd/snd_FxBase.h"
#include "nw4r/types_nw4r.h"
#include "rvl/AXFX.h" // IWYU pragma: export

namespace nw4r {
namespace snd {

class FxReverbHi : public FxBase {
public:
    struct ReverbHiParam {
        f32 preDelayTime; // at 0x0
        f32 fusedTime;    // at 0x4
        f32 coloration;   // at 0x8
        f32 damping;      // at 0xC
        f32 crossTalk;    // at 0x10
        f32 outGain;      // at 0x14
    };

public:
    FxReverbHi();

    virtual ~FxReverbHi() {
        Shutdown();
        ReleaseWorkBuffer();
    } // at 0x8

    virtual bool StartUp();  // at 0xC
    virtual void Shutdown(); // at 0x10

    virtual void UpdateBuffer(
        int channels, void **ppBuffer, u32 size, SampleFormat format, f32 sampleRate,
        OutputMode mode
    ); // at 0x14

    virtual bool AssignWorkBuffer(void *pBuffer, u32 size); // at 0x18
    virtual void ReleaseWorkBuffer();                       // at 0x1C

    u32 GetRequiredMemSize();
    bool SetParam(const ReverbHiParam &rParam);

private:
    detail::AxfxImpl mImpl;   // at 0xC
    ReverbHiParam mParam;     // at 0x18
    AXFX_REVERBHI mAxfxParam; // at 0x30
};

} // namespace snd
} // namespace nw4r

#endif