-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsfx2.txt
123 lines (109 loc) · 5.64 KB
/
sfx2.txt
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
/* afx command interface */
typedef struct
{
uint32_t hi; /* 0x0000 */
uint32_t lo; /* 0x0004 */
/* 0x0008 */
} afx_cmd_t;
8012B208 uint8_t *afx_cmd_write_pos;
8012B209 uint8_t *afx_cmd_read_pos;
8012B280 afx_cmd_t afx_cmd_buf[0x100];
800BB04C void z64_AfxCmdP(uint32_t cmdhi, void *cmdlo);
800BB098 void z64_AfxCmdF(uint32_t cmdhi, float cmdlo);
800BB0BC void z64_AfxCmdW(uint32_t cmdhi, uint32_t cmdlo);
800BB0E0 void z64_AfxCmdB(uint32_t cmdhi, uint8_t cmdlo);
800BB110 void z64_AfxCmdH(uint32_t cmdhi, uint16_t cmdlo);
8012B214 OSMesgQueue *afx_ret_mq; /* ? */
8012B21C OSMesgQueue *afx_mq;
/* message format: 0x0000ssee (start executing commands at position `s`, stop at `e`) */
/* high-level audio control structures (separate from afx) */
typedef struct
{
/* volume effect state */
float vs_current; /* 0x0000 */
float vs_target; /* 0x0004 */
float vs_delta; /* 0x0008 */
uint16_t vs_time; /* 0x000C */
char pad_00_[0x0002]; /* 0x000E */
/* pitch effect state */
float ps_current; /* 0x0010 */
float ps_target; /* 0x0014 */
float ps_delta; /* 0x0018 */
uint16_t ps_time; /* 0x001C */
char pad_01_[0x0002]; /* 0x001E */
/* 0x0020 */
} z64_chan_ctl_t;
typedef struct
{
/* volume effect state */
float vs_current; /* 0x0000 */
float vs_target; /* 0x0004 */
float vs_delta; /* 0x0008 */
uint16_t vs_time; /* 0x000C */
/* volume effect parameters (for starting a volume effect) */
uint8_t vp_factors[4]; /* 0x000E */
uint8_t vp_time; /* 0x0012 */
uint8_t vp_start; /* 0x0013 */
/* pitch effect parameters (ditto) */
uint32_t pp_bits; /* 0x0014 */
uint16_t pp_unk; /* 0x0018 */
char pad_00_[0x0002]; /* 0x001A */
/* pitch effect state */
float ps_current; /* 0x001C */
float ps_target; /* 0x0020 */
float ps_delta; /* 0x0024 */
uint16_t ps_time; /* 0x0028 */
char pad_01_[0x0002]; /* 0x002A */
/* unknown */
uint32_t w2C; /* 0x002C */
char unk_00_[0x001C]; /* 0x0030 */
uint8_t b4C; /* 0x004C */
uint8_t b4D; /* 0x004D */
uint8_t b4E; /* 0x004E */
char pad_02_[0x0001]; /* 0x004F */
/* channel control stuff */
z64_chan_ctl_t channels[0x10]; /* 0x0050 */
/* bitmask of channels with active effects */
uint16_t ch_pitch_state; /* 0x0250 */
uint16_t ch_volume_state; /* 0x0252 */
/* sequence info */
uint16_t seq_idx; /* 0x0254 */
uint16_t prev_seq_idx; /* 0x0256 */
/* unknown */
uint16_t h258; /* 0x0258 */
char unk_01_[0x0006]; /* 0x025A */
uint8_t b260; /* 0x0260 */
char pad_03_[0x0003]; /* 0x0261 */
/* 0x0264 */
} z64_seq_ctl_t;
80124C00 z64_seq_ctl_t z64_seq_ctl[4];
800C9DA0 f800C9DA0(uint8_t sequencer_idx, uint8_t seq_idx, ?); /* play a sequence on the specified sequencer */
- z64 audio commands (32-bit)
bits description
-------------------------------------------------------------------------------------------------------------------------------
4stt00vv on sequencer `s`, fade to volume `v` over `t * 2` frames.
6sttccvv on sequencer `s`, channel `c`, fade to volume `v` over `t * 2` frames.
As00cccc on sequencer `s`, mute channels set in bitmask `c`, unmute others.
F000uucc set afx config to `c`. `u` is unknown.
- afx commands (64-bit)
bits description
-------------------------------------------------------------------------------------------------------------------------------
01sscc00 vvvvvvvv set volume on channel `c` in sequencer `s` to `v` (float).
03sscc00 pp000000 set panning on channel `c` in sequencer `s` to `p` (00 = left, 7F = right).
04sscc00 pppppppp set pitch on channel `c` in sequencer `s` to `p` (float).
06ssccpp vv000000 set parameter `p` on channel `c` in sequencer `s` to `v`.
08sscc00 ff000000 set bit 4 (channel mute?) in flags of channel `c` in sequencer `s` to `f` (low bit).
41ss0000 vvvvvvvv set volume on sequencer `s` to `v` (float).
46ss00pp vv000000 set parameter `p` on sequencer `s` to `v`.
82ssmmuu 0000ffff play sequence `m` on sequencer `s`, fade in over `f` subframes. `u` is unknown.
90ss0000 cccc0000 set multi-channel command channel mask on sequencer `s` to `c`.
F8000000 00000000 some kind of terminator.
F9000000 000000cc set audio config to `c`.
7spp00vv -> 46ss00pp vv000000
8spp0cvv
if ((z64_seq_ctl[s].h258 & (1 << c)) == 0)
afx(06ssccpp vv000000);
06ssccpp vv000000
afx.seq[s].channels[c]->i8a8[p] = v;
46ss00pp vv000000
afx.seq[s].b158a8[p] = v;