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