Twilight Princess
Decompilation of The Legend of Zelda: Twilight Princess
Loading...
Searching...
No Matches
Channel.h
Go to the documentation of this file.
1#ifndef NW4HBM_SND_CHANNEL_H
2#define NW4HBM_SND_CHANNEL_H
3
4#include <climits> // USHRT_MAX
5
6#include <revolution/types.h>
7
8#include "EnvGenerator.h"
9#include "InstancePool.h"
10#include "Lfo.h"
11#include "MoveValue.h"
12#include "WaveFile.h"
13#include "snd_global.h"
14#include "snd_types.h"
15
16#include "../ut/LinkList.h"
17
18#include "../db/assert.h"
19
20namespace nw4hbm {
21 namespace snd {
22 namespace detail {
23 class Channel : public LinkedInstance {
24 public:
31
32 typedef void (*ChannelCallback)(Channel* dropChannel, ChannelCallbackStatus status,
33 u32 callbackArg);
34
40
41 public:
44
46 void Update(bool doPeriodicProc);
47 void Start(const WaveData& waveData, s32 length);
48 void Release();
49 void Stop();
50
52 void SetDecay(int decay) { mEnvelope.SetDecay(decay); }
53 void SetSustain(int sustain) { mEnvelope.SetSustain(sustain); }
54
55 void SetRelease(int release) { mEnvelope.SetRelease(release); }
56 bool IsRelease() const {
58 }
59
60 void SetLfoParam(const LfoParam& rParam) { mLfo.SetParam(rParam); }
62
63 void Pause(bool pause) {
64 mPauseFlag = pause;
65 mVoice->Pause(pause);
66 }
67
68 bool IsPause() const { return mPauseFlag != false; }
69 bool IsActive() const { return mActiveFlag; }
70 bool IsAutoUpdateSweep() const { return mAutoSweep; }
71
72 void SetUserVolume(f32 volume) { mUserVolume = volume; }
73 void SetUserPitch(f32 pitch) { mUserPitch = pitch; }
74 void SetUserPitchRatio(f32 ratio) { mUserPitchRatio = ratio; }
75 void SetUserPan(f32 pan) { mUserPan = pan; }
77 void SetUserPan2(f32 pan2) { mUserPan2 = pan2; }
79 void SetUserLpfFreq(f32 freq) { mUserLpfFreq = freq; }
80
82
83 void SetMainOutVolume(f32 volume) { mMainOutVolume = volume; }
84 void SetMainSend(f32 send) { mMainSend = send; }
85 void SetFxSend(AuxBus bus, f32 send) { mFxSend[bus] = send; }
86
87 void SetSilence(bool silence, int fadeTimes) {
88 NW4R_ASSERT_MINMAXLT(124, fadeTimes, 0, 0xFFFF);
89 mSilenceVolume.SetTarget(silence ? 0 : SILENCE_VOLUME_MAX, fadeTimes);
90 }
91
92 void SetRemoteOutVolume(int remoteIndex, f32 volume) {
93 NW4R_ASSERT_MINMAX(165, remoteIndex, 0, 4);
94 mRemoteOutVolume[remoteIndex] = volume;
95 }
96
97 void SetRemoteSend(int remoteIndex, f32 send) {
98 NW4R_ASSERT_MINMAX(170, remoteIndex, 0, 4);
99 mRemoteSend[remoteIndex] = send;
100 }
101
102 void SetRemoteFxSend(int remoteIndex, f32 send) {
103 NW4R_ASSERT_MINMAX(175, remoteIndex, 0, 4);
104 mRemoteFxSend[remoteIndex] = send;
105 }
106
107 void UpdateSweep(int count);
108 void SetSweepParam(f32 pitch, int time, bool autoUpdate);
110
111 void SetInitVolume(f32 volume) { mInitVolume = volume; }
112 void SetInitPan(f32 pan) { mInitPan = pan; }
114 void SetTune(f32 tune) { mTune = tune; }
115
116 void SetKey(int key) { mKey = key; }
117 void SetOriginalKey(int key) { mOriginalKey = key; }
118
119 s32 GetLength() const { return mLength; }
120 void SetLength(s32 length) { mLength = length; }
121
123 void SetNextTrackChannel(Channel* channel) { mNextLink = channel; }
124
125 static void UpdateAllChannel();
126 static Channel* AllocChannel(int channels, int voices, int priority,
127 ChannelCallback pCallback, u32 callbackArg);
128 static void FreeChannel(Channel* channel);
129
131 void* arg);
132
133 private:
134 static const u8 SILENCE_VOLUME_MAX = 255;
135
136 static const int KEY_INIT = 60;
137 static const int ORIGINAL_KEY_INIT = 60;
138
139 static const int PRIORITY_RELEASE = 1;
140
142 /* 0x20 */ Lfo mLfo;
143 /* 0x38 */ u8 mLfoTarget;
144 /* 0x39 */ bool mPauseFlag;
145 /* 0x3A */ bool mActiveFlag;
146 /* 0x3B */ bool mAllocFlag;
147 /* 0x3C */ bool mAutoSweep;
148 /* 0x40 */ f32 mUserVolume;
150 /* 0x48 */ f32 mUserPan;
152 /* 0x50 */ f32 mUserPan2;
154 /* 0x58 */ f32 mUserLpfFreq;
155 /* 0x5C */ int mOutputLineFlag;
156 /* 0x60 */ f32 mMainOutVolume;
157 /* 0x64 */ f32 mMainSend;
159 /* 0x74 */ f32 mRemoteOutVolume[WPAD_MAX_CONTROLLERS];
160 /* 0x84 */ f32 mRemoteSend[WPAD_MAX_CONTROLLERS];
161 /* 0x94 */ f32 mRemoteFxSend[WPAD_MAX_CONTROLLERS];
162 /* 0xA4 */ f32 mUserPitch;
163 /* 0xA8 */ f32 mSweepPitch;
164 /* 0xAC */ s32 mSweepCounter;
165 /* 0xB0 */ s32 mSweepLength;
166 /* 0xB4 */ f32 mInitVolume;
167 /* 0xB8 */ f32 mInitPan;
169 /* 0xC0 */ f32 mTune;
171 /* 0xCC */ int mKey;
172 /* 0xD0 */ int mOriginalKey;
173 /* 0xD4 */ s32 mLength;
175 /* 0xDC */ u32 mCallbackData;
176 /* 0xE0 */ AxVoice* mVoice;
177 /* 0xE4 */ Channel* mNextLink;
178
179 static Channel mChannel[AX_MAX_VOICES + 1];
180 };
181 } // namespace detail
182 } // namespace snd
183} // namespace nw4hbm
184
185#endif
static BOOL flag
Definition DEMOAVX.c:20
Definition snd_types.h:10
Definition AxVoice.h:123
CallbackStatus
Definition AxVoice.h:127
Definition Channel.h:23
void SetUserPitch(f32 pitch)
Definition Channel.h:73
bool mAutoSweep
Definition Channel.h:147
void Start(const WaveData &waveData, s32 length)
void SetUserPitchRatio(f32 ratio)
Definition Channel.h:74
s32 mSweepCounter
Definition Channel.h:164
void SetTune(f32 tune)
Definition Channel.h:114
void SetKey(int key)
Definition Channel.h:116
Channel * GetNextTrackChannel() const
Definition Channel.h:122
f32 mUserSurroundPan
Definition Channel.h:151
bool IsActive() const
Definition Channel.h:69
Channel * mNextLink
Definition Channel.h:177
void SetSustain(int sustain)
Definition Channel.h:53
static const u8 SILENCE_VOLUME_MAX
Definition Channel.h:134
int mOutputLineFlag
Definition Channel.h:155
bool mActiveFlag
Definition Channel.h:145
void SetInitVolume(f32 volume)
Definition Channel.h:111
s32 GetLength() const
Definition Channel.h:119
void SetLength(s32 length)
Definition Channel.h:120
f32 mInitPan
Definition Channel.h:167
ChannelCallbackStatus
Definition Channel.h:25
@ CALLBACK_STATUS_FINISH
Definition Channel.h:28
@ CALLBACK_STATUS_CANCEL
Definition Channel.h:29
@ CALLBACK_STATUS_DROP
Definition Channel.h:27
@ CALLBACK_STATUS_STOPPED
Definition Channel.h:26
void Update(bool doPeriodicProc)
f32 mUserPitchRatio
Definition Channel.h:149
bool IsPause() const
Definition Channel.h:68
f32 mRemoteFxSend[WPAD_MAX_CONTROLLERS]
Definition Channel.h:161
void SetInitSurroundPan(f32 pan)
Definition Channel.h:113
static const int KEY_INIT
Definition Channel.h:136
f32 mUserVolume
Definition Channel.h:148
f32 mUserLpfFreq
Definition Channel.h:154
f32 mMainSend
Definition Channel.h:157
s32 mSweepLength
Definition Channel.h:165
void SetRelease(int release)
Definition Channel.h:55
void SetMainOutVolume(f32 volume)
Definition Channel.h:83
f32 mUserPan2
Definition Channel.h:152
bool mAllocFlag
Definition Channel.h:146
void SetUserLpfFreq(f32 freq)
Definition Channel.h:79
static void VoiceCallback(AxVoice *voice, AxVoice::CallbackStatus status, void *arg)
void SetAttack(int attack)
Definition Channel.h:51
void SetFxSend(AuxBus bus, f32 send)
Definition Channel.h:85
f32 mRemoteSend[WPAD_MAX_CONTROLLERS]
Definition Channel.h:160
void SetOutputLine(int flag)
Definition Channel.h:81
f32 mInitVolume
Definition Channel.h:166
void SetRemoteOutVolume(int remoteIndex, f32 volume)
Definition Channel.h:92
f32 mRemoteOutVolume[WPAD_MAX_CONTROLLERS]
Definition Channel.h:159
u8 mLfoTarget
Definition Channel.h:143
f32 mInitSurroundPan
Definition Channel.h:168
void SetRemoteFxSend(int remoteIndex, f32 send)
Definition Channel.h:102
Lfo mLfo
Definition Channel.h:142
void SetUserSurroundPan(f32 pan)
Definition Channel.h:76
void InitParam(ChannelCallback callback, u32 callbackArg)
int mOriginalKey
Definition Channel.h:172
u32 mCallbackData
Definition Channel.h:175
bool IsRelease() const
Definition Channel.h:56
void SetLfoTarget(LfoTarget target)
Definition Channel.h:61
void(*) ChannelCallback(Channel *dropChannel, ChannelCallbackStatus status, u32 callbackArg)
Definition Channel.h:32
f32 mTune
Definition Channel.h:169
f32 mUserPitch
Definition Channel.h:162
f32 mSweepPitch
Definition Channel.h:163
void SetUserSurroundPan2(f32 pan2)
Definition Channel.h:78
void SetOriginalKey(int key)
Definition Channel.h:117
s32 mLength
Definition Channel.h:173
ChannelCallback mCallback
Definition Channel.h:174
void SetLfoParam(const LfoParam &rParam)
Definition Channel.h:60
f32 mUserPan
Definition Channel.h:150
static Channel * AllocChannel(int channels, int voices, int priority, ChannelCallback pCallback, u32 callbackArg)
void SetUserPan(f32 pan)
Definition Channel.h:75
void SetUserPan2(f32 pan2)
Definition Channel.h:77
LfoTarget
Definition Channel.h:35
@ LFO_TARGET_PITCH
Definition Channel.h:36
@ LFO_TARGET_PAN
Definition Channel.h:38
@ LFO_TARGET_VOLUME
Definition Channel.h:37
int mKey
Definition Channel.h:171
f32 mFxSend[AUX_BUS_NUM]
Definition Channel.h:158
static void FreeChannel(Channel *channel)
void SetRemoteSend(int remoteIndex, f32 send)
Definition Channel.h:97
f32 mMainOutVolume
Definition Channel.h:156
bool mPauseFlag
Definition Channel.h:144
void SetInitPan(f32 pan)
Definition Channel.h:112
void SetDecay(int decay)
Definition Channel.h:52
bool IsAutoUpdateSweep() const
Definition Channel.h:70
void SetMainSend(f32 send)
Definition Channel.h:84
void SetSilence(bool silence, int fadeTimes)
Definition Channel.h:87
void SetSweepParam(f32 pitch, int time, bool autoUpdate)
AxVoice * mVoice
Definition Channel.h:176
static const int ORIGINAL_KEY_INIT
Definition Channel.h:137
void Pause(bool pause)
Definition Channel.h:63
static Channel mChannel[AX_MAX_VOICES+1]
Definition Channel.h:179
static const int PRIORITY_RELEASE
Definition Channel.h:139
MoveValue< u8, u16 > mSilenceVolume
Definition Channel.h:170
f32 mUserSurroundPan2
Definition Channel.h:153
EnvGenerator mEnvelope
Definition Channel.h:141
void SetUserVolume(f32 volume)
Definition Channel.h:72
void SetNextTrackChannel(Channel *channel)
Definition Channel.h:123
Definition EnvGenerator.h:9
@ STATUS_RELEASE
Definition EnvGenerator.h:15
Status GetStatus() const
Definition EnvGenerator.h:25
Definition Lfo.h:22
void SetParam(const LfoParam &rParam)
Definition Lfo.h:27
Definition MoveValue.h:11
void SetTarget(TValue target, TTime frame)
Definition MoveValue.h:38
static void attack(b_oh_class *i_this)
Definition d_a_b_oh.cpp:189
static void * target
Definition d_a_npc_cd2.cpp:886
OSTime time
Definition GXInit.c:34
static u32 status
Definition fstload.c:9
unsigned long u32
Definition types.h:12
float f32
Definition types.h:25
signed long s32
Definition types.h:11
unsigned char u8
Definition types.h:8
AuxBus
Definition snd_types.h:73
@ AUX_BUS_NUM
Definition snd_types.h:73
Definition HBMAnmController.h:6
static void callback(u32 param_0)
Definition OSExec.c:308
Definition WaveFile.h:47