summaryrefslogtreecommitdiff
path: root/include/JSystem/JAudio/JAISound.h
blob: 9c7d772cfc973f332d4faa5fc867c286b5b7102e (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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
#ifndef JAISOUND_H
#define JAISOUND_H

#include "dolphin/types.h"

enum JAISoundType {
    SOUNDPARAM_Unk0     = 0,
    SOUNDPARAM_Dopplar  = 1,
    SOUNDPARAM_Demo     = 2,
    SOUNDPARAM_Unk3     = 3,
    SOUNDPARAM_Distance = 4,
    SOUNDPARAM_Unk5     = 5,
    SOUNDPARAM_Direct   = 6,
    SOUNDPARAM_Fadeout  = 7,
    SOUNDPARAM_Unk8     = 8,
    SOUNDPARAM_Unk9     = 9,
    SOUNDPARAM_Unk10    = 10,
    SOUNDPARAM_Pause    = 11,
};

enum JAISoundState {
    SOUNDSTATE_Inactive = 0,
    SOUNDSTATE_Stored   = 1,
    SOUNDSTATE_Loaded   = 2,
    SOUNDSTATE_Ready    = 3,
    SOUNDSTATE_Playing  = 4,
    SOUNDSTATE_Fadeout  = 5,
};

enum JAISoundTrackActiveFlags {
    SOUNDACTIVE_Unk0                 = 0,
    SOUNDACTIVE_Unk1                 = 1 << 0,  // 0x1
    SOUNDACTIVE_DoFadeout            = 1 << 1,  // 0x2
    SOUNDACTIVE_TempoProportion      = 1 << 2,  // 0x4
    SOUNDACTIVE_Unk4                 = 1 << 3,  // 0x8
    SOUNDACTIVE_Unk5                 = 1 << 4,  // 0x10
    SOUNDACTIVE_Unk6                 = 1 << 5,  // 0x20
    SOUNDACTIVE_TrackVolume          = 1 << 6,  // 0x40
    SOUNDACTIVE_TrackPan             = 1 << 7,  // 0x80
    SOUNDACTIVE_TrackDolby           = 1 << 8,  // 0x100
    SOUNDACTIVE_TrackPitch           = 1 << 9,  // 0x200
    SOUNDACTIVE_Unk11                = 1 << 10, // 0x400
    SOUNDACTIVE_TrackFxmix           = 1 << 11, // 0x800
    SOUNDACTIVE_TrackPortData        = 1 << 12, // 0x1000
    SOUNDACTIVE_Unk14                = 1 << 13, // 0x2000
    SOUNDACTIVE_Unk15                = 1 << 14, // 0x4000
    SOUNDACTIVE_Unk16                = 1 << 15, // 0x8000
    SOUNDACTIVE_Unk17                = 1 << 16, // 0x10000
    SOUNDACTIVE_Unk18                = 1 << 17, // 0x20000
    SOUNDACTIVE_Volume               = 1 << 18, // 0x40000
    SOUNDACTIVE_Pan                  = 1 << 19, // 0x80000
    SOUNDACTIVE_Pitch                = 1 << 20, // 0x100000
    SOUNDACTIVE_Fxmix                = 1 << 21, // 0x200000
    SOUNDACTIVE_Dolby                = 1 << 22, // 0x400000
    SOUNDACTIVE_TrackInterruptSwitch = 1 << 23, // 0x800000
};

namespace JAInter {
    class Actor;
    class SeParameter;
    class SeqParameter;
    class StreamParameter;
}

class JAISound {
public:
    struct PositionInfo_t {
        /* 0x00 */ f32 field_0x0;
        /* 0x04 */ u8 field_0x4[0x8 - 0x4];
        /* 0x08 */ f32 field_0x8;
        /* 0x0C */ u8 field_0xc[0x18 - 0xc];
        /* 0x18 */ f32 field_0x18;
    };

    JAISound();
    virtual f32 setPositionDopplarCommon(u32);
    virtual f32 setDistanceVolumeCommon(f32, u8);
    virtual f32 setDistancePanCommon();
    virtual void setSeDistanceParameters();
    virtual void setSeDistanceVolume(u8);
    virtual void setSeDistancePan(u8);
    virtual void setSeDistancePitch(u8);
    virtual void setSeDistanceFxmix(u8);
    virtual void setSeDistanceFir(u8);
    virtual void setSeDistanceDolby(u8);
    virtual void setSePositionDopplar();

    u8 getSeCategoryNumber();
    int getSwBit();
    int checkSwBit(u32);
    u8 getInfoPriority();
    void clearMainSoundPPointer();
    void start(u32);
    void stop(u32);
    void setVolume(f32, u32, u8);
    void setPan(f32, u32, u8);
    void setPitch(f32, u32, u8);
    void setFxmix(f32, u32, u8);
    void setDolby(f32, u32, u8);
    void setTempoProportion(f32, u32);
    void setPortData(u8, u16);
    void setPrepareFlag(u8);
    void setSeqInterVolume(u8, f32, u32);
    void setSeqInterPan(u8, f32, u32);
    void setSeqInterPitch(u8, f32, u32);
    void setSeqInterFxmix(u8, f32, u32);
    void setSeqInterDolby(u8, f32, u32);
    void setSeqTempoProportion(f32, u32);
    void setSeqPortData(u8, u16, u32);
    void setTrackVolume(u8, f32, u32);
    void setTrackInterruptSwitch(u8, u8);
    void setTrackPortData(u8, u8, u16);
    void setSeInterRandomPara(f32*, u32, f32, f32);
    void setSeInterVolume(u8, f32, u32, u8);
    void setSeInterPan(u8, f32, u32, u8);
    void setSeInterPitch(u8, f32, u32, f32);
    void setSeInterFxmix(u8, f32, u32, u8);
    void setSeInterDolby(u8, f32, u32, u8);
    void setSePortData(u8, u16);
    void setStreamInterVolume(u8, f32, u32);
    void setStreamInterPitch(u8, f32, u32);
    void setStreamInterPan(u8, f32, u32);
    void setStreamPrepareFlag(u8);
    void setPauseMode(u8, u8);
    void setSeqPrepareFlag(u8);
    f32 getSeqInterVolume(u8);
    f32 getStreamInterVolume(u8);
    JAInter::SeqParameter* getSeqParameter();
    JAInter::SeParameter* getSeParameter();
    JAInter::StreamParameter* getStreamParameter();
    int getTrackPortRoute(u8, u8);
    u32 checkSoundHandle(u32, void*);
    void initParameter(JAISound**, JAInter::Actor*, u32, u32, u8, void*);

    // TODO
    void decWait() {}
    void getAct() {}
    void getAdjustPriority() {}
    void getFadetime() {}
    u32 getID() { return mSoundID; }
    void getInfoPointer() {}
    void getMapInfo() {}
    void getNextSound() {}
    void getPlayGameFrameCounter() {}
    void getPlayer() {}
    PositionInfo_t* getPositionInfo() { return mPositionInfo; }
    void getPrevSound() {}
    void getPriority() {}
    void getStatus() {}
    void getTrack() {}
    void getTrans() {}
    void getWait() {}
    void incPlayGameFrameCounter() {}
    void setCustomParameterPointer(void*) {}
    void setDemoFxmix(f32 f1, u32 r4) { setFxmix(f1, r4, 3); }
    void setDemoPan(f32 f1, u32 r4) { setPan(f1, r4, 3); }
    void setDemoPitch(f32 f1, u32 r4) { setPitch(f1, r4, 3); }
    void setDemoVolume(f32 f1, u32 r4) { setVolume(f1, r4, SOUNDPARAM_Unk3); }
    void setFadetime(u32) {}
    void setID(u32) {}
    void setMainSoundPPointer(JAISound**) {}
    void setNextSound(JAISound*) {}
    void setPrevSound(JAISound*) {}
    void setPriority(u32) {}
    void setRandom(u8) {}
    void setSeInterDolbyU7(u8, u8, u32, u8) {}
    void setSeInterFxmixU7(u8, u8, u32, u8) {}
    void setSeqInterVolumeU7(u8, u8, u32) {}
    void setStatus(u8) {}
    void setTrack(u8) {}
    void setTrackVolumeU7(u8, u8, u32) {}
    void setVolumeU7(u8 value, u32 moveTime, u8 type) {
        f32 volume = value / 127.0f;
        setVolume(volume, moveTime, type);
    }
    void setWait(u8) {}

    /* 0x04 */ u8 field_0x4;
    /* 0x05 */ u8 mState;
    /* 0x06 */ u8 field_0x6;
    /* 0x07 */ u8 field_0x7;
    /* 0x08 */ u8 field_0x8;
    /* 0x09 */ u8 field_0x9;
    /* 0x0a */ s16 field_0xa;
    /* 0x0c */ u32 mSoundID;
    /* 0x10 */ int field_0x10;
    /* 0x14 */ u32 mFadeCounter;
    /* 0x18 */ u32 field_0x18;
    /* 0x1c */ int field_0x1c;
    /* 0x20 */ PositionInfo_t* mPositionInfo;
    /* 0x24 */ void* field_0x24;
    /* 0x28 */ u32 field_0x28;
    /* 0x2C */ int field_0x2c;
    /* 0x30 */ JAISound* field_0x30;
    /* 0x34 */ JAISound* field_0x34;
    /* 0x38 */ JAISound** field_0x38;
    /* 0x3C */ void* field_0x3c;
    /* 0x40 */ void* field_0x40;
};

namespace JAInter {
    class MoveParaSet {
    public:
        MoveParaSet(f32 param_1=1.0f) { init(param_1); }
        int set(f32 param_1, u32 param_2);
        BOOL move();

        void init(f32 value) {
            mCurrentValue = value;
            mTargetValue = value;
            mMoveCounter = 0;
        }

        /* 0x00 */ f32 mTargetValue;
        /* 0x04 */ f32 mCurrentValue;
        /* 0x08 */ f32 mMoveAmount;
        /* 0x0C */ int mMoveCounter;
    };

    class MoveParaSetInitHalf : public MoveParaSet {
    public:
        MoveParaSetInitHalf() : MoveParaSet(0.5f) {}
    };

    class MoveParaSetInitZero : public MoveParaSet {
    public:
        MoveParaSetInitZero() : MoveParaSet(0.0f) {}
    };

    class LinkSound {
    public:
        void init(JAISound* param_1, u32 param_2);
        JAISound* getSound();
        void releaseSound(JAISound* param_1);

        /* 0x00 */ JAISound* field_0x0;
        /* 0x04 */ JAISound* field_0x4;
        /* 0x08 */ JAISound* Buffer;
    };
}

#define IsJAISoundIDInUse(id)    (((id)&0x800) == 0)
#define IsJAISoundIDFree(id)     (((id)&0x800) == 1)
#define JAISoundID_TypeMask      0xC0000000
#define JAISoundID_Type_Se       0x00000000
#define JAISoundID_Type_Sequence 0x80000000
#define JAISoundID_Type_Stream   0xC0000000

#endif /* JAISOUND_H */