Mario Kart 64
internal.h
Go to the documentation of this file.
1 #ifndef AUDIO_INTERNAL_H
2 #define AUDIO_INTERNAL_H
3 
4 #include <ultra64.h>
5 
6 #include "types.h"
7 
8 #define SEQUENCE_PLAYERS 4
9 #define SEQUENCE_CHANNELS 48
10 #define SEQUENCE_LAYERS 64
11 
12 #define LAYERS_MAX 4
13 #define CHANNELS_MAX 16
14 
15 #define NO_LAYER ((struct SequenceChannelLayer *)(-1))
16 
17 #define MUTE_BEHAVIOR_STOP_SCRIPT 0x80 // stop processing sequence/channel scripts
18 #define MUTE_BEHAVIOR_STOP_NOTES 0x40 // prevent further notes from playing
19 #define MUTE_BEHAVIOR_SOFTEN 0x20 // lower volume, by default to half
20 
21 #define SEQUENCE_PLAYER_STATE_0 0
22 #define SEQUENCE_PLAYER_STATE_FADE_OUT 1
23 #define SEQUENCE_PLAYER_STATE_2 2
24 #define SEQUENCE_PLAYER_STATE_3 3
25 #define SEQUENCE_PLAYER_STATE_4 4
26 
27 #define NOTE_PRIORITY_DISABLED 0
28 #define NOTE_PRIORITY_STOPPING 1
29 #define NOTE_PRIORITY_MIN 2
30 #define NOTE_PRIORITY_DEFAULT 3
31 
32 #define TATUMS_PER_BEAT 48
33 
34 // abi.h contains more details about the ADPCM and S8 codecs, "skip" skips codec processing
35 #define CODEC_ADPCM 0
36 #define CODEC_S8 1
37 #define CODEC_SKIP 2
38 
39 #define TEMPO_SCALE TATUMS_PER_BEAT
40 
42 #define US_FLOAT(x) x ## f
43 #define US_FLOAT2(x) x
44 
45 // Convert u8 or u16 to f32. On JP, this uses a u32->f32 conversion,
46 // resulting in more bloated codegen, while on US it goes through s32.
47 // Since u8 and u16 fit losslessly in both, behavior is the same.
48 #define FLOAT_CAST(x) (f32) (s32) (x)
49 
50 // No-op printf macro which leaves string literals in rodata in IDO. IDO
51 // doesn't support variadic macros, so instead we let the parameter list
52 // expand to a no-op comma expression. Another possibility is that it might
53 // have expanded to something with "if (0)". See also goddard/gd_main.h.
54 // On US/JP, -sopt optimizes away these except for external.c.
55 #ifdef __sgi
56 #define stubbed_printf
57 #else
58 #define stubbed_printf(...)
59 #endif
60 
61 #define eu_stubbed_printf_0(msg) stubbed_printf(msg)
62 #define eu_stubbed_printf_1(msg, a) stubbed_printf(msg, a)
63 #define eu_stubbed_printf_2(msg, a, b) stubbed_printf(msg, a, b)
64 #define eu_stubbed_printf_3(msg, a, b, c) stubbed_printf(msg, a, b, c)
65 
66 struct NotePool;
67 
68 struct AudioListItem {
69  // A node in a circularly linked list. Each node is either a head or an item:
70  // - Items can be either detached (prev = NULL), or attached to a list.
71  // 'value' points to something of interest.
72  // - List heads are always attached; if a list is empty, its head points
73  // to itself. 'count' contains the size of the list.
74  // If the list holds notes, 'pool' points back to the pool where it lives.
75  // Otherwise, that member is NULL.
78  union {
79  void *value; // either Note* or SequenceChannelLayer*
81  } u;
82  struct NotePool *pool;
83 }; // size = 0x10
84 
85 struct NotePool {
86  struct AudioListItem disabled;
87  struct AudioListItem decaying;
88  struct AudioListItem releasing;
89  struct AudioListItem active;
90 };
91 
92 struct VibratoState {
93  /*0x00, 0x00*/ struct SequenceChannel *seqChannel;
94  /*0x04, 0x04*/ u32 time;
95  /* , 0x08*/ s16 *curve;
96  /* , 0x0C*/ f32 extent;
97  /* , 0x10*/ f32 rate;
98  /* , 0x14*/ u8 active;
99  /*0x12, 0x16*/ u16 rateChangeTimer;
100  /*0x14, 0x18*/ u16 extentChangeTimer;
101  /*0x16, 0x1A*/ u16 delay;
102 }; // size = 0x18, 0x1C on EU
103 
104 // Pitch sliding by up to one octave in the positive direction. Negative
105 // direction is "supported" by setting extent to be negative. The code
106 // extrapolates exponentially in the wrong direction in that case, but that
107 // doesn't prevent seqplayer from doing it, AFAICT.
108 struct Portamento {
109  u8 mode; // bit 0x80 denotes something; the rest are an index 0-5
113 }; // size = 0x10
114 
115 struct AdsrEnvelope {
118 }; // size = 0x4
119 
120 struct AdpcmLoop {
125  s16 state[16]; // only exists if count != 0. 8-byte aligned
126 };
127 
128 struct AdpcmBook {
131  s16 book[1]; // size 8 * order * npredictors. 8-byte aligned
132 };
133 
138  struct AdpcmLoop *loop;
139  struct AdpcmBook *book;
140  u32 sampleSize; // never read. either 0 or 1 mod 9, depending on padding
141 };
142 
145  f32 tuning; // frequency scale factor
146 }; // size = 0x8
147 
148 struct Instrument {
149  /*0x00*/ u8 loaded;
150  /*0x01*/ u8 normalRangeLo;
151  /*0x02*/ u8 normalRangeHi;
152  /*0x03*/ u8 releaseRate;
153  /*0x04*/ struct AdsrEnvelope *envelope;
154  /*0x08*/ struct AudioBankSound lowNotesSound;
155  /*0x10*/ struct AudioBankSound normalNotesSound;
156  /*0x18*/ struct AudioBankSound highNotesSound;
157 }; // size = 0x20
158 
159 struct Drum {
163  struct AudioBankSound sound;
165 };
166 
167 struct AudioBank {
168  struct Drum **drums;
170 }; // dynamic size
171 
172 struct CtlEntry {
177  struct Drum **drums;
178 }; // size = 0xC
179 
181  u8 *pc;
182  u8 *stack[4];
185 }; // size = 0x1C
186 
187 // Also known as a Group, according to debug strings.
189  /*US/JP, EU, SH */
190  /*0x000, 0x000, 0x000*/ u8 enabled : 1;
191  /*0x000, 0x000*/ u8 finished : 1; // never read
192  /*0x000, 0x000*/ u8 muted : 1;
193  /*0x000, 0x000*/ u8 seqDmaInProgress : 1;
194  /*0x000, 0x000*/ u8 bankDmaInProgress : 1;
195  /* 0x000*/ u8 recalculateVolume : 1;
196  /*0x002, 0x001, 0x001*/ u8 state;
197  /*0x003, 0x002*/ u8 noteAllocPolicy;
198  /*0x004, 0x003*/ u8 muteBehavior;
199  /*0x005, 0x004*/ u8 seqId;
200  /*0x006, 0x005*/ u8 defaultBank[1]; // must be an array to get a comparison
201  // to match; other u8's might also be part of that array
202  /*0x007, 0x006*/ u8 loadingBankId;
203  /* , 0x007, 0x007*/ s8 seqVariationEu[1];
204  /*0x00A, 0x008*/ u16 tempo; // beats per minute in JP, tatums per minute in US/EU
205  /*0x00C, 0x00A*/ u16 tempoAcc;
206  /*0x010, 0x00C, 0x00E*/ s16 transposition;
207  /*0x012, 0x00E, 0x010*/ u16 delay;
208  /*0x00E, 0x010, 0x012*/ u16 fadeRemainingFrames;
209  /* , 0x012, 0x014*/ u16 fadeTimerUnkEu;
210  /*0x014, 0x014*/ u8 *seqData; // buffer of some sort
211  /*0x018, 0x018, 0x1C*/ f32 fadeVolume; // set to 1.0f
212  /*0x01C, 0x01C*/ f32 fadeVelocity; // set to 0.0f
213  /*0x020, 0x020, 0x024*/ f32 volume; // set to 0.0f
214  /*0x024, 0x024*/ f32 muteVolumeScale; // set to 0.5f
215  /* , 0x028, 0x02C*/ f32 fadeVolumeScale;
216  /* , 0x02C*/ f32 appliedFadeVolume;
217  /*0x02C, 0x030, 0x034*/ struct SequenceChannel *channels[CHANNELS_MAX];
218  /*0x06C, 0x070*/ struct M64ScriptState scriptState;
219  /*0x088, 0x08C*/ u8 *shortNoteVelocityTable;
220  /*0x08C, 0x090*/ u8 *shortNoteDurationTable;
221  /*0x090, 0x094*/ struct NotePool notePool;
222  /*0x0D0, 0x0D4*/ OSMesgQueue seqDmaMesgQueue;
223  /*0x0E8, 0x0EC*/ OSMesg seqDmaMesg;
224  /*0x0EC, 0x0F0*/ OSIoMesg seqDmaIoMesg;
225  /*0x100, 0x108*/ OSMesgQueue bankDmaMesgQueue;
226  /*0x118, 0x120*/ OSMesg bankDmaMesg;
227  /*0x11C, 0x124*/ OSIoMesg bankDmaIoMesg;
228  /*0x130, 0x13C*/ u8 *bankDmaCurrMemAddr;
229  /*0x138, 0x140*/ uintptr_t bankDmaCurrDevAddr;
230  /*0x13C, 0x144*/ ssize_t bankDmaRemaining;
231 }; // size = 0x140, 0x148 on EU, 0x14C on SH
232 
233 struct AdsrSettings {
237 }; // size = 0x8
238 
239 struct AdsrState {
240  /*0x00, 0x00*/ u8 action;
241  /*0x01, 0x01*/ u8 state;
242  /*0x08, 0x02*/ s16 envIndex;
243  /*0x0A, 0x04*/ s16 delay;
244  /* , 0x08*/ f32 sustain;
245  /* , 0x0C*/ f32 velocity;
246  /* , 0x10*/ f32 fadeOutVel;
247  /* , 0x14*/ f32 current;
248  /* , 0x18*/ f32 target;
250  /*0x1C, 0x20*/ struct AdsrEnvelope *envelope;
251 }; // size = 0x20, 0x24 in EU
252 
254  /* 0x00 */ u8 bit0 : 1;
255  /* 0x00 */ u8 bit1 : 1;
256  /* 0x00 */ u8 bit2 : 1;
257  /* 0x00 */ u8 usesHeadsetPanEffects : 1;
258  /* 0x00 */ u8 stereoHeadsetEffects : 2;
259  /* 0x00 */ u8 strongRight : 1;
260  /* 0x00 */ u8 strongLeft : 1;
261 };
262 
263 union ReverbBits {
264  /* 0x00 */ struct ReverbBitsData s;
265  /* 0x00 */ u8 asByte;
266 };
267 struct ReverbInfo {
269  u8 synthesisVolume; // UQ4.4, although 0 <= x < 1 is rounded up to 1
271  union ReverbBits reverbBits;
276 };
277 
283 }; // size = 0x10
284 
285 // Also known as a SubTrack, according to debug strings.
286 // Confusingly, a SubTrack is a container of Tracks.
288  /* U/J, EU, SH */
289  /*0x00, 0x00*/ u8 enabled : 1;
290  /*0x00, 0x00*/ u8 finished : 1;
291  /*0x00, 0x00*/ u8 stopScript : 1;
292  /*0x00, 0x00*/ u8 stopSomething2 : 1; // sets SequenceChannelLayer.stopSomething
293  /*0x00, 0x00*/ u8 hasInstrument : 1;
294  /*0x00, 0x00*/ u8 stereoHeadsetEffects : 1;
295  /*0x00, ????*/ u8 largeNotes : 1; // notes specify duration and velocity
296  /*0x00, ????*/ u8 unused : 1; // never read, set to 0
297  /* , 0x01*/ union {
298  struct {
300  u8 volume : 1;
301  u8 pan : 1;
305  /*0x01, 0x02*/ u8 noteAllocPolicy;
306  /*0x02, 0x03, 0x03*/ u8 muteBehavior;
307  /*0x03, 0x04, 0x04*/ u8 reverbVol; // until EU: Q1.7, after EU: UQ0.8
308  /*0x04, ????*/ u8 notePriority; // 0-3
309  /*0x05, 0x06*/ u8 bankId;
310  /* , 0x07*/ u8 reverbIndex;
311  /* , 0x08, 0x09*/ u8 bookOffset;
312  /* , 0x09*/ u8 newPan;
313  /* , 0x0A*/ u8 panChannelWeight; // proportion of pan that comes from the channel (0..128)
314  /*0x08, 0x0C, 0x0E*/ u16 vibratoRateStart; // initially 0x800
315  /*0x0A, 0x0E, 0x10*/ u16 vibratoExtentStart;
316  /*0x0C, 0x10, 0x12*/ u16 vibratoRateTarget; // initially 0x800
317  /*0x0E, 0x12, 0x14*/ u16 vibratoExtentTarget;
318  /*0x10, 0x14, 0x16*/ u16 vibratoRateChangeDelay;
319  /*0x12, 0x16, 0x18*/ u16 vibratoExtentChangeDelay;
320  /*0x14, 0x18, 0x1A*/ u16 vibratoDelay;
321  /*0x16, 0x1A, 0x1C*/ u16 delay;
322  /*0x18, 0x1C, 0x1E*/ s16 instOrWave; // either 0 (none), instrument index + 1, or
323  // 0x80..0x83 for sawtooth/triangle/sine/square waves.
324  /*0x1A, 0x1E, 0x20*/ s16 transposition;
325  /*0x1C, 0x20, 0x24*/ f32 volumeScale;
326  /*0x20, 0x24, 0x28*/ f32 volume;
327  /* , 0x28*/ s32 pan;
328  /* , 0x2C*/ f32 appliedVolume;
329  /*0x2C, 0x30*/ f32 freqScale;
330  /*0x30, 0x34*/ u8 (*dynTable)[][2];
331  /*0x34, ????*/ struct Note *noteUnused; // never read
332  /*0x38, ????*/ struct SequenceChannelLayer *layerUnused; // never read
333  /*0x3C, 0x40*/ struct Instrument *instrument;
334  /*0x40, 0x44*/ struct SequencePlayer *seqPlayer;
335  /*0x44, 0x48*/ struct SequenceChannelLayer *layers[LAYERS_MAX];
336  /*0x54, 0x58 */ s8 soundScriptIO[8]; // bridge between sound script and audio lib. For player 2,
337  // [0] contains enabled, [4] contains sound ID, [5] contains reverb adjustment
338  /*0x5C, 0x60*/ struct M64ScriptState scriptState;
339  /*0x78, 0x7C*/ struct AdsrSettings adsr;
340  /*0x80, 0x84*/ struct NotePool notePool;
341 }; // size = 0xC0, 0xC4 in EU, 0xD0 in SH
342 
343 // Also known as a Track, according to debug strings.
345  /* U/J, EU, SH */
346  /*0x00, 0x00*/ u8 enabled : 1;
347  /*0x00, 0x00*/ u8 finished : 1;
348  /*0x00, 0x00*/ u8 stopSomething : 1; // ?
349  /*0x00, 0x00*/ u8 continuousNotes : 1; // keep the same note for consecutive notes with the same sound
350  /* , 0x00*/ u8 unusedEu0b8 : 1;
351  /* , 0x00*/ u8 notePropertiesNeedInit : 1;
352  /* , 0x00*/ u8 ignoreDrumPan : 1;
353  /* , 0x01, 0x02*/ u8 instOrWave;
354  /*0x01, 0x02, 0x03*/ u8 status; // 0x03 in SH
355  /*0x02, 0x03*/ u8 noteDuration; // set to 0x80
356  /*0x03, 0x04*/ u8 portamentoTargetNote;
357  /* , 0x05*/ u8 pan; // 0..128
358  /* , 0x06, 0x07*/ u8 notePan;
359  /*0x04, 0x08*/ struct Portamento portamento;
360  /*0x14, 0x18*/ struct AdsrSettings adsr;
361  /*0x1C, 0x20*/ u16 portamentoTime;
362  /*0x1E, 0x22*/ s16 transposition; // #semitones added to play commands
363  // (m64 instruction encoding only allows referring to the limited range
364  // 0..0x3f; this makes 0x40..0x7f accessible as well)
365  /*0x20, 0x24, 0x24*/ f32 freqScale;
366  /*0x24, 0x28, 0x2C*/ f32 velocitySquare;
367  /*0x2C, 0x2C, 0x30*/ f32 noteVelocity;
368  /*0x34, 0x30, 0x34*/ f32 noteFreqScale;
370  /*0x3A, 0x36*/ s16 playPercentage; // it's not really a percentage...
371  /*0x3C, 0x38*/ s16 delay;
372  /*0x3E, 0x3A*/ s16 duration;
373  /*0x40, 0x3C*/ s16 delayUnused; // set to 'delay', never read
374  /*0x44, 0x40, 0x44*/ struct Note *note;
375  /*0x48, 0x44*/ struct Instrument *instrument;
376  /*0x4C, 0x48*/ struct AudioBankSound *sound;
377  /*0x50, 0x4C, 0x50*/ struct SequenceChannel *seqChannel;
378  /*0x54, 0x50*/ struct M64ScriptState scriptState;
379  /*0x70, 0x6C*/ struct AudioListItem listItem;
380  u8 pad2[4];
381 }; // size = 0x80
382 
384  /*0x00*/ u8 restart;
385  /*0x01*/ u8 sampleDmaIndex;
388  /*0x04, 0x06*/ u16 samplePosFrac;
389  /*0x08*/ s32 samplePosInt;
391  /*0x10*/ s16 curVolLeft; // UQ0.16 (EU Q1.15)
392  /*0x12*/ s16 curVolRight; // UQ0.16 (EU Q1.15)
393 };
395  /* U/J, EU, SH */
396  /*0x04, 0x00, 0x00*/ u8 priority;
397  /* 0x01, 0x01*/ u8 waveId;
398  /* 0x02, 0x02*/ u8 sampleCountIndex;
399  /*0x08, 0x04, 0x06*/ s16 adsrVolScale;
400  /*0x18, 0x08, 0x08*/ f32 portamentoFreqScale;
401  /*0x1C, 0x0C, 0x0C*/ f32 vibratoFreqScale;
402  /*0x28, 0x10, */ struct SequenceChannelLayer *prevParentLayer;
403  /*0x2C, 0x14, 0x14*/ struct SequenceChannelLayer *parentLayer;
404  /*0x30, 0x18, 0x18*/ struct SequenceChannelLayer *wantedParentLayer;
405  /* , 0x1C, 0x1C*/ struct NoteAttributes attributes;
406  /*0x54, 0x28, 0x2C*/ struct AdsrState adsr;
407  /*0x74, 0x4C, */ struct Portamento portamento;
408  /*0x84, 0x5C, */ struct VibratoState vibratoState;
409 };
410 struct NoteSubEu {
411  /*0x00*/ volatile u8 enabled : 1;
412  /*0x00*/ u8 needsInit : 1;
413  /*0x00*/ u8 finished : 1;
414  /*0x00*/ u8 envMixerNeedsInit : 1;
415  /*0x00*/ u8 stereoStrongRight : 1;
416  /*0x00*/ u8 stereoStrongLeft : 1;
417  /*0x00*/ u8 stereoHeadsetEffects : 1;
418  /*0x00*/ u8 usesHeadsetPanEffects : 1;
419  /*0x01*/ u8 reverbIndex : 3;
420  /*0x01*/ u8 bookOffset : 3;
421  /*0x01*/ u8 isSyntheticWave : 1;
422  /*0x01*/ u8 hasTwoAdpcmParts : 1;
423  /*0x02*/ u8 bankId;
424  /*0x03*/ u8 headsetPanRight;
425  /*0x04*/ u8 headsetPanLeft;
426  /*0x05*/ u8 reverbVol; // UQ0.7 (EU Q1.7)
427  /*0x06*/ u16 targetVolLeft; // UQ0.12 (EU UQ0.10)
428  /*0x08*/ u16 targetVolRight; // UQ0.12 (EU UQ0.10)
429  /*0x0A*/ u16 resamplingRateFixedPoint; // stored as signed but loaded as u16
430  /*0x0C*/ union {
433  } sound;
434 };
435 struct Note {
436  /* U/J, EU, SH */
437  /*0xA4, 0x00, 0x00*/ struct AudioListItem listItem;
438  /* 0x10, 0x10*/ struct NoteSynthesisState synthesisState;
439  // The next members are actually part of a struct (NotePlaybackState), but
440  // that results in messy US/EU ifdefs. Instead we cast to a struct pointer
441  // when needed... This breaks alignment on non-N64 platforms, which we hack
442  // around by skipping the padding in that case.
444 #ifdef TARGET_N64
445  u8 pad0[12];
446 #endif
447 
448  /*0x04, 0x30, 0x30*/ u8 priority;
449  /* 0x31, 0x31*/ u8 waveId;
450  /* 0x32, 0x32*/ u8 sampleCountIndex;
451  /*0x08, 0x34, 0x36*/ s16 adsrVolScale;
452  /*0x18, 0x38, */ f32 portamentoFreqScale;
453  /*0x1C, 0x3C, */ f32 vibratoFreqScale;
454  /*0x28, 0x40, */ struct SequenceChannelLayer *prevParentLayer;
455  /*0x2C, 0x44, 0x44*/ struct SequenceChannelLayer *parentLayer;
456  /*0x30, 0x48, 0x48*/ struct SequenceChannelLayer *wantedParentLayer;
457  /* , 0x4C, 0x4C*/ struct NoteAttributes attributes;
458  /*0x54, 0x58, 0x5C*/ struct AdsrState adsr;
459  /*0x74, 0x7C*/ struct Portamento portamento;
460  /*0x84, 0x8C*/ struct VibratoState vibratoState;
461  u8 pad3[8];
462  /* , 0xB0, 0xB4*/ struct NoteSubEu noteSubEu;
463 }; // size = 0xC0, known to be 0xC8 on SH
464 
465 // While this struct needs to be size 0xA0, its not clear
466 // what innards are necessary. All the possible options from
467 // SM64 are sized incorrectly so we're probably looking at some
468 // MK64 weirdness
474 }; // size = 0xA0
475 
476 /*
477 SM64 NoteSynthesisBuffers, kept here because I'm not sure our current
478 version is correct
479 struct NoteSynthesisBuffers {
480  s16 adpcmdecState[0x10];
481  s16 finalResampleState[0x10];
482 #ifdef VERSION_SH
483  s16 unk[0x10];
484  s16 filterBuffer[0x20];
485  s16 panSamplesBuffer[0x20];
486 #else
487  s16 mixEnvelopeState[0x28];
488  s16 panResampleState[0x10];
489  s16 panSamplesBuffer[0x20];
490  s16 dummyResampleState[0x10];
491 #if defined(VERSION_JP) || defined(VERSION_US)
492  s16 samples[0x40];
493 #endif
494 #endif
495 };
496 */
497 
500  u8 windowSize; // To be multiplied by 64
502 };
503 
505  /* 0x00 */ u32 frequency;
506  /* 0x04 */ u8 unk1; // always 1
508  /* 0x06 */ u8 numReverbs; // always 1
509  /* 0x07 */ u8 unk2; // always 0
510  /* 0x08 */ struct ReverbSettingsEU *reverbSettings;
511  /* 0x0C */ u16 volume;
512  /* 0x0E */ u16 unk3; // always 0
513  /* 0x10 */ u32 persistentSeqMem;
514  /* 0x14 */ u32 persistentBankMem;
515  /* 0x18 */ u32 unk_18;
516  /* 0x1C */ u32 temporarySeqMem;
517  /* 0x20 */ u32 temporaryBankMem;
518  /* 0x24 */ u32 unk_24;
519 }; // 0x30 on shindou
520 
522  /*0x00*/ u32 frequency;
524  /*0x05*/ u8 reverbDownsampleRate; // always 1
526  /*0x08*/ u16 reverbGain;
527  /*0x0A*/ u16 volume;
532 }; // size = 0x1C
533 
535  /*0x00*/ s16 presetUnk4; // audio frames per vsync?
536  /*0x02*/ u16 frequency;
537  /*0x04*/ u16 aiFrequency; // ?16
545  /*0x14*/ f32 resampleRate; // contains 32000.0f / frequency
546  /*0x18*/ f32 updatesPerFrameInv; // 1.0f / updatesPerFrame
547  /*0x1C*/ f32 unkUpdatesPerFrameScaled; // 3.0f / (1280.0f * updatesPerFrame)
548 };
549 
601 struct EuAudioCmd {
602  union {
603  struct {
608  } s;
610  } u;
611  union {
617  } u2;
618 };
619 
620 #endif // AUDIO_INTERNAL_H
#define LAYERS_MAX
Definition: internal.h:12
#define CHANNELS_MAX
Definition: internal.h:13
Definition: internal.h:128
s16 book[1]
Definition: internal.h:131
s32 npredictors
Definition: internal.h:130
s32 order
Definition: internal.h:129
Definition: internal.h:120
u32 pad
Definition: internal.h:124
u32 start
Definition: internal.h:121
s16 state[16]
Definition: internal.h:125
u32 count
Definition: internal.h:123
u32 end
Definition: internal.h:122
Definition: internal.h:115
s16 delay
Definition: internal.h:116
s16 arg
Definition: internal.h:117
Definition: internal.h:233
u8 sustain
Definition: internal.h:235
struct AdsrEnvelope * envelope
Definition: internal.h:236
u8 releaseRate
Definition: internal.h:234
Definition: internal.h:239
s32 pad1C
Definition: internal.h:249
f32 target
Definition: internal.h:248
f32 current
Definition: internal.h:247
s16 delay
Definition: internal.h:243
u8 state
Definition: internal.h:241
s16 envIndex
Definition: internal.h:242
f32 velocity
Definition: internal.h:245
u8 action
Definition: internal.h:240
struct AdsrEnvelope * envelope
Definition: internal.h:250
f32 fadeOutVel
Definition: internal.h:246
f32 sustain
Definition: internal.h:244
Definition: internal.h:134
u32 sampleSize
Definition: internal.h:140
u8 loaded
Definition: internal.h:136
u8 * sampleAddr
Definition: internal.h:137
struct AdpcmLoop * loop
Definition: internal.h:138
u8 unused
Definition: internal.h:135
struct AdpcmBook * book
Definition: internal.h:139
Definition: internal.h:143
f32 tuning
Definition: internal.h:145
struct AudioBankSample * sample
Definition: internal.h:144
Definition: internal.h:167
struct Instrument * instruments[1]
Definition: internal.h:169
struct Drum ** drums
Definition: internal.h:168
Definition: internal.h:534
s16 updatesPerFrame
Definition: internal.h:541
s16 samplesPerUpdateMax
Definition: internal.h:543
s16 samplesPerFrameTarget
Definition: internal.h:538
f32 resampleRate
Definition: internal.h:545
s16 minAiBufferLength
Definition: internal.h:540
u16 aiFrequency
Definition: internal.h:537
f32 updatesPerFrameInv
Definition: internal.h:546
f32 unkUpdatesPerFrameScaled
Definition: internal.h:547
s16 maxAiBufferLength
Definition: internal.h:539
s16 presetUnk4
Definition: internal.h:535
u16 frequency
Definition: internal.h:536
s16 samplesPerUpdateMin
Definition: internal.h:544
s16 samplesPerUpdate
Definition: internal.h:542
Definition: internal.h:68
union AudioListItem::@0 u
struct NotePool * pool
Definition: internal.h:82
s32 count
Definition: internal.h:80
void * value
Definition: internal.h:79
struct AudioListItem * prev
Definition: internal.h:76
struct AudioListItem * next
Definition: internal.h:77
Definition: internal.h:504
u32 temporarySeqMem
Definition: internal.h:516
u32 persistentBankMem
Definition: internal.h:514
struct ReverbSettingsEU * reverbSettings
Definition: internal.h:510
u8 maxSimultaneousNotes
Definition: internal.h:507
u32 unk_24
Definition: internal.h:518
u8 unk1
Definition: internal.h:506
u32 frequency
Definition: internal.h:505
u32 temporaryBankMem
Definition: internal.h:517
u32 persistentSeqMem
Definition: internal.h:513
u8 unk2
Definition: internal.h:509
u32 unk_18
Definition: internal.h:515
u8 numReverbs
Definition: internal.h:508
u16 unk3
Definition: internal.h:512
u16 volume
Definition: internal.h:511
Definition: internal.h:521
u16 volume
Definition: internal.h:527
u32 temporarySeqMem
Definition: internal.h:530
u16 reverbWindowSize
Definition: internal.h:525
u8 maxSimultaneousNotes
Definition: internal.h:523
u32 persistentBankMem
Definition: internal.h:529
u32 temporaryBankMem
Definition: internal.h:531
u16 reverbGain
Definition: internal.h:526
u8 reverbDownsampleRate
Definition: internal.h:524
u32 persistentSeqMem
Definition: internal.h:528
u32 frequency
Definition: internal.h:522
Definition: internal.h:172
struct Instrument ** instruments
Definition: internal.h:176
struct Drum ** drums
Definition: internal.h:177
u8 numDrums
Definition: internal.h:175
u8 unused
Definition: internal.h:173
u8 numInstruments
Definition: internal.h:174
Definition: internal.h:159
u8 pan
Definition: internal.h:161
u8 loaded
Definition: internal.h:162
struct AdsrEnvelope * envelope
Definition: internal.h:164
struct AudioBankSound sound
Definition: internal.h:163
u8 releaseRate
Definition: internal.h:160
Definition: internal.h:601
f32 as_f32
Definition: internal.h:614
struct EuAudioCmd::@4::@6 s
s32 as_s32
Definition: internal.h:612
u8 op
Definition: internal.h:604
s32 first
Definition: internal.h:609
u8 as_u8
Definition: internal.h:615
union EuAudioCmd::@5 u2
s8 as_s8
Definition: internal.h:616
u8 arg2
Definition: internal.h:606
u8 arg1
Definition: internal.h:605
u32 as_u32
Definition: internal.h:613
u8 arg3
Definition: internal.h:607
union EuAudioCmd::@4 u
Definition: internal.h:148
u8 releaseRate
Definition: internal.h:152
struct AdsrEnvelope * envelope
Definition: internal.h:153
struct AudioBankSound lowNotesSound
Definition: internal.h:154
u8 loaded
Definition: internal.h:149
u8 normalRangeLo
Definition: internal.h:150
struct AudioBankSound highNotesSound
Definition: internal.h:156
u8 normalRangeHi
Definition: internal.h:151
struct AudioBankSound normalNotesSound
Definition: internal.h:155
Definition: internal.h:180
u8 depth
Definition: internal.h:184
u8 remLoopIters[4]
Definition: internal.h:183
u8 * stack[4]
Definition: internal.h:182
u8 * pc
Definition: internal.h:181
Definition: internal.h:278
f32 velocity
Definition: internal.h:282
u8 pan
Definition: internal.h:280
f32 freqScale
Definition: internal.h:281
u8 reverbVol
Definition: internal.h:279
Definition: internal.h:394
f32 vibratoFreqScale
Definition: internal.h:401
struct SequenceChannelLayer * parentLayer
Definition: internal.h:403
u8 waveId
Definition: internal.h:397
struct SequenceChannelLayer * prevParentLayer
Definition: internal.h:402
struct Portamento portamento
Definition: internal.h:407
struct SequenceChannelLayer * wantedParentLayer
Definition: internal.h:404
s16 adsrVolScale
Definition: internal.h:399
f32 portamentoFreqScale
Definition: internal.h:400
u8 priority
Definition: internal.h:396
u8 sampleCountIndex
Definition: internal.h:398
struct VibratoState vibratoState
Definition: internal.h:408
struct AdsrState adsr
Definition: internal.h:406
struct NoteAttributes attributes
Definition: internal.h:405
Definition: internal.h:85
struct AudioListItem releasing
Definition: internal.h:88
struct AudioListItem disabled
Definition: internal.h:86
struct AudioListItem active
Definition: internal.h:89
struct AudioListItem decaying
Definition: internal.h:87
Definition: internal.h:410
struct AudioBankSound * audioBankSound
Definition: internal.h:432
u8 headsetPanRight
Definition: internal.h:424
u8 bankId
Definition: internal.h:423
u8 usesHeadsetPanEffects
Definition: internal.h:418
u8 reverbVol
Definition: internal.h:426
u16 targetVolLeft
Definition: internal.h:427
u8 stereoStrongRight
Definition: internal.h:415
u8 hasTwoAdpcmParts
Definition: internal.h:422
s16 * samples
Definition: internal.h:431
u8 reverbIndex
Definition: internal.h:419
u8 headsetPanLeft
Definition: internal.h:425
u8 bookOffset
Definition: internal.h:420
u8 isSyntheticWave
Definition: internal.h:421
u16 resamplingRateFixedPoint
Definition: internal.h:429
union NoteSubEu::@3 sound
u16 targetVolRight
Definition: internal.h:428
u8 envMixerNeedsInit
Definition: internal.h:414
u8 finished
Definition: internal.h:413
u8 stereoStrongLeft
Definition: internal.h:416
volatile u8 enabled
Definition: internal.h:411
u8 stereoHeadsetEffects
Definition: internal.h:417
u8 needsInit
Definition: internal.h:412
Definition: internal.h:469
s16 panSamplesBuffer[0x20]
Definition: internal.h:473
s16 finalResampleState[0x10]
Definition: internal.h:471
s16 panResampleState[0x10]
Definition: internal.h:472
s16 adpcmdecState[0x10]
Definition: internal.h:470
Definition: internal.h:383
s32 samplePosInt
Definition: internal.h:389
struct NoteSynthesisBuffers * synthesisBuffers
Definition: internal.h:390
s16 curVolRight
Definition: internal.h:392
u16 samplePosFrac
Definition: internal.h:388
s16 curVolLeft
Definition: internal.h:391
u8 prevHeadsetPanLeft
Definition: internal.h:387
u8 prevHeadsetPanRight
Definition: internal.h:386
u8 sampleDmaIndex
Definition: internal.h:385
u8 restart
Definition: internal.h:384
Definition: internal.h:435
struct VibratoState vibratoState
Definition: internal.h:460
struct SequenceChannelLayer * wantedParentLayer
Definition: internal.h:456
u8 pad3[8]
Definition: internal.h:461
f32 vibratoFreqScale
Definition: internal.h:453
u8 waveId
Definition: internal.h:449
struct NoteSynthesisState synthesisState
Definition: internal.h:438
f32 portamentoFreqScale
Definition: internal.h:452
struct AdsrState adsr
Definition: internal.h:458
struct SequenceChannelLayer * parentLayer
Definition: internal.h:455
struct Portamento portamento
Definition: internal.h:459
struct NoteSubEu noteSubEu
Definition: internal.h:462
struct AudioListItem listItem
Definition: internal.h:437
u8 sampleCountIndex
Definition: internal.h:450
u8 priority
Definition: internal.h:448
struct SequenceChannelLayer * prevParentLayer
Definition: internal.h:454
s16 adsrVolScale
Definition: internal.h:451
struct NoteAttributes attributes
Definition: internal.h:457
Definition: os_pi.h:53
Definition: internal.h:108
u8 mode
Definition: internal.h:109
f32 cur
Definition: internal.h:110
f32 speed
Definition: internal.h:111
f32 extent
Definition: internal.h:112
Definition: internal.h:253
u8 bit1
Definition: internal.h:255
u8 strongLeft
Definition: internal.h:260
u8 stereoHeadsetEffects
Definition: internal.h:258
u8 bit2
Definition: internal.h:256
u8 strongRight
Definition: internal.h:259
u8 bit0
Definition: internal.h:254
u8 usesHeadsetPanEffects
Definition: internal.h:257
Definition: internal.h:267
u8 synthesisVolume
Definition: internal.h:269
u8 pan
Definition: internal.h:270
s32 unused
Definition: internal.h:274
s16 * filter
Definition: internal.h:275
union ReverbBits reverbBits
Definition: internal.h:271
u8 reverbVol
Definition: internal.h:268
f32 freqScale
Definition: internal.h:272
f32 velocity
Definition: internal.h:273
Definition: internal.h:498
u8 downsampleRate
Definition: internal.h:499
u8 windowSize
Definition: internal.h:500
u16 gain
Definition: internal.h:501
Definition: internal.h:344
u8 noteDuration
Definition: internal.h:355
struct SequenceChannel * seqChannel
Definition: internal.h:377
u8 continuousNotes
Definition: internal.h:349
s16 duration
Definition: internal.h:372
u16 portamentoTime
Definition: internal.h:361
s16 transposition
Definition: internal.h:362
s16 shortNoteDefaultPlayPercentage
Definition: internal.h:369
f32 freqScale
Definition: internal.h:365
u8 notePropertiesNeedInit
Definition: internal.h:351
u8 pad2[4]
Definition: internal.h:380
struct AudioListItem listItem
Definition: internal.h:379
struct Note * note
Definition: internal.h:374
u8 notePan
Definition: internal.h:358
u8 finished
Definition: internal.h:347
s16 delay
Definition: internal.h:371
struct AdsrSettings adsr
Definition: internal.h:360
u8 instOrWave
Definition: internal.h:353
u8 pan
Definition: internal.h:357
u8 status
Definition: internal.h:354
u8 enabled
Definition: internal.h:346
s16 delayUnused
Definition: internal.h:373
s16 playPercentage
Definition: internal.h:370
f32 noteVelocity
Definition: internal.h:367
f32 velocitySquare
Definition: internal.h:366
struct Portamento portamento
Definition: internal.h:359
u8 ignoreDrumPan
Definition: internal.h:352
struct Instrument * instrument
Definition: internal.h:375
u8 unusedEu0b8
Definition: internal.h:350
struct M64ScriptState scriptState
Definition: internal.h:378
f32 noteFreqScale
Definition: internal.h:368
struct AudioBankSound * sound
Definition: internal.h:376
u8 portamentoTargetNote
Definition: internal.h:356
u8 stopSomething
Definition: internal.h:348
Definition: internal.h:287
u16 vibratoRateStart
Definition: internal.h:314
s32 pan
Definition: internal.h:327
struct NotePool notePool
Definition: internal.h:340
struct Instrument * instrument
Definition: internal.h:333
f32 volume
Definition: internal.h:326
union SequenceChannel::@1 changes
u8 hasInstrument
Definition: internal.h:293
u8 notePriority
Definition: internal.h:308
u16 vibratoExtentTarget
Definition: internal.h:317
u8(* dynTable)[][2]
Definition: internal.h:330
u8 largeNotes
Definition: internal.h:295
u8 freqScale
Definition: internal.h:299
struct AdsrSettings adsr
Definition: internal.h:339
s16 instOrWave
Definition: internal.h:322
u8 bankId
Definition: internal.h:309
u16 vibratoDelay
Definition: internal.h:320
u8 stopSomething2
Definition: internal.h:292
u8 reverbVol
Definition: internal.h:307
u8 newPan
Definition: internal.h:312
u16 vibratoExtentChangeDelay
Definition: internal.h:319
u8 stereoHeadsetEffects
Definition: internal.h:294
struct M64ScriptState scriptState
Definition: internal.h:338
u8 volume
Definition: internal.h:300
struct SequenceChannelLayer * layers[LAYERS_MAX]
Definition: internal.h:335
u8 as_u8
Definition: internal.h:303
f32 freqScale
Definition: internal.h:329
u8 pan
Definition: internal.h:301
u16 vibratoExtentStart
Definition: internal.h:315
u8 muteBehavior
Definition: internal.h:306
struct SequenceChannel::@1::@2 as_bitfields
u8 enabled
Definition: internal.h:289
struct Note * noteUnused
Definition: internal.h:331
s8 soundScriptIO[8]
Definition: internal.h:336
u16 vibratoRateTarget
Definition: internal.h:316
struct SequenceChannelLayer * layerUnused
Definition: internal.h:332
u8 bookOffset
Definition: internal.h:311
u8 reverbIndex
Definition: internal.h:310
u16 delay
Definition: internal.h:321
u8 stopScript
Definition: internal.h:291
u8 panChannelWeight
Definition: internal.h:313
u8 finished
Definition: internal.h:290
struct SequencePlayer * seqPlayer
Definition: internal.h:334
f32 appliedVolume
Definition: internal.h:328
u16 vibratoRateChangeDelay
Definition: internal.h:318
u8 noteAllocPolicy
Definition: internal.h:305
u8 unused
Definition: internal.h:296
s16 transposition
Definition: internal.h:324
f32 volumeScale
Definition: internal.h:325
Definition: internal.h:188
f32 fadeVelocity
Definition: internal.h:212
struct NotePool notePool
Definition: internal.h:221
u8 noteAllocPolicy
Definition: internal.h:197
OSIoMesg bankDmaIoMesg
Definition: internal.h:227
u16 fadeTimerUnkEu
Definition: internal.h:209
s8 seqVariationEu[1]
Definition: internal.h:203
struct M64ScriptState scriptState
Definition: internal.h:218
f32 appliedFadeVolume
Definition: internal.h:216
u8 enabled
Definition: internal.h:190
u8 muteBehavior
Definition: internal.h:198
u8 bankDmaInProgress
Definition: internal.h:194
u8 recalculateVolume
Definition: internal.h:195
u8 seqDmaInProgress
Definition: internal.h:193
OSIoMesg seqDmaIoMesg
Definition: internal.h:224
struct SequenceChannel * channels[CHANNELS_MAX]
Definition: internal.h:217
u16 tempo
Definition: internal.h:204
u16 fadeRemainingFrames
Definition: internal.h:208
u8 loadingBankId
Definition: internal.h:202
u8 seqId
Definition: internal.h:199
OSMesg bankDmaMesg
Definition: internal.h:226
f32 muteVolumeScale
Definition: internal.h:214
s16 transposition
Definition: internal.h:206
f32 volume
Definition: internal.h:213
u8 * shortNoteDurationTable
Definition: internal.h:220
u16 delay
Definition: internal.h:207
u8 * bankDmaCurrMemAddr
Definition: internal.h:228
u8 * shortNoteVelocityTable
Definition: internal.h:219
OSMesgQueue seqDmaMesgQueue
Definition: internal.h:222
u8 * seqData
Definition: internal.h:210
uintptr_t bankDmaCurrDevAddr
Definition: internal.h:229
OSMesgQueue bankDmaMesgQueue
Definition: internal.h:225
u8 muted
Definition: internal.h:192
ssize_t bankDmaRemaining
Definition: internal.h:230
u8 state
Definition: internal.h:196
u8 defaultBank[1]
Definition: internal.h:200
u8 finished
Definition: internal.h:191
f32 fadeVolumeScale
Definition: internal.h:215
u16 tempoAcc
Definition: internal.h:205
OSMesg seqDmaMesg
Definition: internal.h:223
f32 fadeVolume
Definition: internal.h:211
Definition: internal.h:92
struct SequenceChannel * seqChannel
Definition: internal.h:93
u16 extentChangeTimer
Definition: internal.h:100
f32 rate
Definition: internal.h:97
u8 active
Definition: internal.h:98
u32 time
Definition: internal.h:94
s16 * curve
Definition: internal.h:95
u16 delay
Definition: internal.h:101
u16 rateChangeTimer
Definition: internal.h:99
f32 extent
Definition: internal.h:96
signed int s32
Definition: ultratypes.h:15
unsigned int u32
Definition: ultratypes.h:16
signed char s8
Definition: ultratypes.h:11
signed short int s16
Definition: ultratypes.h:13
float f32
Definition: ultratypes.h:32
unsigned short int u16
Definition: ultratypes.h:14
ptrdiff_t ssize_t
Definition: ultratypes.h:43
unsigned char u8
Definition: ultratypes.h:12
Definition: internal.h:263
u8 asByte
Definition: internal.h:265
struct ReverbBitsData s
Definition: internal.h:264