From b9644e9583788c7b72d721487ad44a9616491f43 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Thu, 17 Sep 2020 03:12:19 -0400 Subject: Update Audio Macros Information: Our current audio macros preclude the definition of root key and pan (applicable when used in drumsets, aka "keysplit_all") for GB channels. However, this functionality does exist in m4a--Pokemon Emerald just happens not to use it. However, for the sake of people working with custom music, I believe these values should be modifiable by users. Additionally, given the recent events that have occurred with this repo, I would like to make something fully clear: I have indeed looked at the GBA SDK before, which contains notes on how these sounds are defined; therefore, I cannot blame you if you reject this PR on the grounds that the information is "tainted." However, this information is readily available and matches the same macros used for directsound--it's hardly information that one would need the source to know. --- asm/macros/music_voice.inc | 75 +++++++++++++++++++++++++++++++--------------- 1 file changed, 51 insertions(+), 24 deletions(-) (limited to 'asm/macros') diff --git a/asm/macros/music_voice.inc b/asm/macros/music_voice.inc index b7a9e7f8d..b7aff4766 100644 --- a/asm/macros/music_voice.inc +++ b/asm/macros/music_voice.inc @@ -28,16 +28,22 @@ .byte \release .endm - .macro voice_square_1 sweep, duty_cycle, attack, decay, sustain, release - _voice_square_1 1, \sweep, \duty_cycle, \attack, \decay, \sustain, \release + .macro voice_square_1 base_midi_key, pan, sweep, duty_cycle, attack, decay, sustain, release + _voice_square_1 1, \base_midi_key, \pan, \sweep, \duty_cycle, \attack, \decay, \sustain, \release .endm - .macro voice_square_1_alt sweep, duty_cycle, attack, decay, sustain, release - _voice_square_1 9, \sweep, \duty_cycle, \attack, \decay, \sustain, \release + .macro voice_square_1_alt base_midi_key, pan, sweep, duty_cycle, attack, decay, sustain, release + _voice_square_1 9, \base_midi_key, \pan, \sweep, \duty_cycle, \attack, \decay, \sustain, \release .endm - .macro _voice_square_1 type, sweep, duty_cycle, attack, decay, sustain, release - .byte \type, 60, 0 + .macro _voice_square_1 type, base_midi_key, pan, sweep, duty_cycle, attack, decay, sustain, release + .byte \type + .byte \base_midi_key + .if \pan != 0 + .byte (0x80 | \pan) + .else + .byte 0 + .endif .byte \sweep .byte (\duty_cycle & 0x3) .byte 0, 0, 0 @@ -47,16 +53,23 @@ .byte (\release & 0x7) .endm - .macro voice_square_2 duty_cycle, attack, decay, sustain, release - _voice_square_2 2, \duty_cycle, \attack, \decay, \sustain, \release + .macro voice_square_2 base_midi_key, pan, duty_cycle, attack, decay, sustain, release + _voice_square_2 2, \base_midi_key, \pan, \duty_cycle, \attack, \decay, \sustain, \release .endm - .macro voice_square_2_alt duty_cycle, attack, decay, sustain, release - _voice_square_2 10, \duty_cycle, \attack, \decay, \sustain, \release + .macro voice_square_2_alt base_midi_key, pan, duty_cycle, attack, decay, sustain, release + _voice_square_2 10, \base_midi_key, \pan, \duty_cycle, \attack, \decay, \sustain, \release .endm - .macro _voice_square_2 type, duty_cycle, attack, decay, sustain, release - .byte \type, 60, 0, 0 + .macro _voice_square_2 type, base_midi_key, pan, duty_cycle, attack, decay, sustain, release + .byte \type + .byte \base_midi_key + .if \pan != 0 + .byte (0x80 | \pan) + .else + .byte 0 + .endif + .byte 0 .byte (\duty_cycle & 0x3) .byte 0, 0, 0 .byte (\attack & 0x7) @@ -65,16 +78,23 @@ .byte (\release & 0x7) .endm - .macro voice_programmable_wave wave_samples_pointer, attack, decay, sustain, release - _voice_programmable_wave 3, \wave_samples_pointer, \attack, \decay, \sustain, \release + .macro voice_programmable_wave base_midi_key, pan, wave_samples_pointer, attack, decay, sustain, release + _voice_programmable_wave 3, \base_midi_key, \pan, \wave_samples_pointer, \attack, \decay, \sustain, \release .endm - .macro voice_programmable_wave_alt wave_samples_pointer, attack, decay, sustain, release - _voice_programmable_wave 11, \wave_samples_pointer, \attack, \decay, \sustain, \release + .macro voice_programmable_wave_alt base_midi_key, pan, wave_samples_pointer, attack, decay, sustain, release + _voice_programmable_wave 11, \base_midi_key, \pan, \wave_samples_pointer, \attack, \decay, \sustain, \release .endm - .macro _voice_programmable_wave type, wave_samples_pointer, attack, decay, sustain, release - .byte \type, 60, 0, 0 + .macro _voice_programmable_wave type, base_midi_key, pan, wave_samples_pointer, attack, decay, sustain, release + .byte \type + .byte \base_midi_key + .if \pan != 0 + .byte (0x80 | \pan) + .else + .byte 0 + .endif + .byte 0 .4byte \wave_samples_pointer .byte (\attack & 0x7) .byte (\decay & 0x7) @@ -82,16 +102,23 @@ .byte (\release & 0x7) .endm - .macro voice_noise period, attack, decay, sustain, release - _voice_noise 4, \period, \attack, \decay, \sustain, \release + .macro voice_noise base_midi_key, pan, period, attack, decay, sustain, release + _voice_noise 4, \base_midi_key, \pan, \period, \attack, \decay, \sustain, \release .endm - .macro voice_noise_alt period, attack, decay, sustain, release - _voice_noise 12, \period, \attack, \decay, \sustain, \release + .macro voice_noise_alt base_midi_key, pan, period, attack, decay, sustain, release + _voice_noise 12, \base_midi_key, \pan, \period, \attack, \decay, \sustain, \release .endm - .macro _voice_noise type, period, attack, decay, sustain, release - .byte \type, 60, 0, 0 + .macro _voice_noise type, base_midi_key, pan, period, attack, decay, sustain, release + .byte \type + .byte \base_midi_key + .if \pan != 0 + .byte (0x80 | \pan) + .else + .byte 0 + .endif + .byte 0 .byte (\period & 0x1) .byte 0, 0, 0 .byte (\attack & 0x7) -- cgit v1.2.3 From f4a49dcd1d74ae4bb2c6552838ffdff66f2b8000 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Thu, 17 Sep 2020 19:56:55 -0400 Subject: Make all arguments for audio macros required --- asm/macros/music_voice.inc | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) (limited to 'asm/macros') diff --git a/asm/macros/music_voice.inc b/asm/macros/music_voice.inc index b7aff4766..64dd38214 100644 --- a/asm/macros/music_voice.inc +++ b/asm/macros/music_voice.inc @@ -1,19 +1,19 @@ - .macro voice_directsound base_midi_key, pan, sample_data_pointer, attack, decay, sustain, release + .macro voice_directsound base_midi_key:req, pan:req, sample_data_pointer:req, attack:req, decay:req, sustain:req, release:req .byte 0 _voice_directsound \base_midi_key, \pan, \sample_data_pointer, \attack, \decay, \sustain, \release .endm - .macro voice_directsound_no_resample base_midi_key, pan, sample_data_pointer, attack, decay, sustain, release + .macro voice_directsound_no_resample base_midi_key:req, pan:req, sample_data_pointer:req, attack:req, decay:req, sustain:req, release:req .byte 8 _voice_directsound \base_midi_key, \pan, \sample_data_pointer, \attack, \decay, \sustain, \release .endm - .macro voice_directsound_alt base_midi_key, pan, sample_data_pointer, attack, decay, sustain, release + .macro voice_directsound_alt base_midi_key:req, pan:req, sample_data_pointer:req, attack:req, decay:req, sustain:req, release:req .byte 16 _voice_directsound \base_midi_key, \pan, \sample_data_pointer, \attack, \decay, \sustain, \release .endm - .macro _voice_directsound base_midi_key, pan, sample_data_pointer, attack, decay, sustain, release + .macro _voice_directsound base_midi_key:req, pan:req, sample_data_pointer:req, attack:req, decay:req, sustain:req, release:req .byte \base_midi_key .byte 0 .if \pan != 0 @@ -28,15 +28,15 @@ .byte \release .endm - .macro voice_square_1 base_midi_key, pan, sweep, duty_cycle, attack, decay, sustain, release + .macro voice_square_1 base_midi_key:req, pan:req, sweep:req, duty_cycle:req, attack:req, decay:req, sustain:req, release:req _voice_square_1 1, \base_midi_key, \pan, \sweep, \duty_cycle, \attack, \decay, \sustain, \release .endm - .macro voice_square_1_alt base_midi_key, pan, sweep, duty_cycle, attack, decay, sustain, release + .macro voice_square_1_alt base_midi_key:req, pan:req, sweep:req, duty_cycle:req, attack:req, decay:req, sustain:req, release:req _voice_square_1 9, \base_midi_key, \pan, \sweep, \duty_cycle, \attack, \decay, \sustain, \release .endm - .macro _voice_square_1 type, base_midi_key, pan, sweep, duty_cycle, attack, decay, sustain, release + .macro _voice_square_1 type:req, base_midi_key:req, pan:req, sweep:req, duty_cycle:req, attack:req, decay:req, sustain:req, release:req .byte \type .byte \base_midi_key .if \pan != 0 @@ -53,15 +53,15 @@ .byte (\release & 0x7) .endm - .macro voice_square_2 base_midi_key, pan, duty_cycle, attack, decay, sustain, release + .macro voice_square_2 base_midi_key:req, pan:req, duty_cycle:req, attack:req, decay:req, sustain:req, release:req _voice_square_2 2, \base_midi_key, \pan, \duty_cycle, \attack, \decay, \sustain, \release .endm - .macro voice_square_2_alt base_midi_key, pan, duty_cycle, attack, decay, sustain, release + .macro voice_square_2_alt base_midi_key:req, pan:req, duty_cycle:req, attack:req, decay:req, sustain:req, release:req _voice_square_2 10, \base_midi_key, \pan, \duty_cycle, \attack, \decay, \sustain, \release .endm - .macro _voice_square_2 type, base_midi_key, pan, duty_cycle, attack, decay, sustain, release + .macro _voice_square_2 type:req, base_midi_key:req, pan:req, duty_cycle:req, attack:req, decay:req, sustain:req, release:req .byte \type .byte \base_midi_key .if \pan != 0 @@ -78,15 +78,15 @@ .byte (\release & 0x7) .endm - .macro voice_programmable_wave base_midi_key, pan, wave_samples_pointer, attack, decay, sustain, release + .macro voice_programmable_wave base_midi_key:req, pan:req, wave_samples_pointer:req, attack:req, decay:req, sustain:req, release:req _voice_programmable_wave 3, \base_midi_key, \pan, \wave_samples_pointer, \attack, \decay, \sustain, \release .endm - .macro voice_programmable_wave_alt base_midi_key, pan, wave_samples_pointer, attack, decay, sustain, release + .macro voice_programmable_wave_alt base_midi_key:req, pan:req, wave_samples_pointer:req, attack:req, decay:req, sustain:req, release:req _voice_programmable_wave 11, \base_midi_key, \pan, \wave_samples_pointer, \attack, \decay, \sustain, \release .endm - .macro _voice_programmable_wave type, base_midi_key, pan, wave_samples_pointer, attack, decay, sustain, release + .macro _voice_programmable_wave type:req, base_midi_key:req, pan:req, wave_samples_pointer:req, attack:req, decay:req, sustain:req, release:req .byte \type .byte \base_midi_key .if \pan != 0 @@ -102,15 +102,15 @@ .byte (\release & 0x7) .endm - .macro voice_noise base_midi_key, pan, period, attack, decay, sustain, release + .macro voice_noise base_midi_key:req, pan:req, period:req, attack:req, decay:req, sustain:req, release:req _voice_noise 4, \base_midi_key, \pan, \period, \attack, \decay, \sustain, \release .endm - .macro voice_noise_alt base_midi_key, pan, period, attack, decay, sustain, release + .macro voice_noise_alt base_midi_key:req, pan:req, period:req, attack:req, decay:req, sustain:req, release:req _voice_noise 12, \base_midi_key, \pan, \period, \attack, \decay, \sustain, \release .endm - .macro _voice_noise type, base_midi_key, pan, period, attack, decay, sustain, release + .macro _voice_noise type:req, base_midi_key:req, pan:req, period:req, attack:req, decay:req, sustain:req, release:req .byte \type .byte \base_midi_key .if \pan != 0 @@ -127,25 +127,25 @@ .byte (\release & 0x7) .endm - .macro voice_keysplit voice_group_pointer, keysplit_table_pointer + .macro voice_keysplit voice_group_pointer:req, keysplit_table_pointer:req .byte 0x40, 0, 0, 0 .4byte \voice_group_pointer .4byte \keysplit_table_pointer .endm - .macro voice_keysplit_all voice_group_pointer + .macro voice_keysplit_all voice_group_pointer:req .byte 0x80, 0, 0, 0 .4byte \voice_group_pointer .4byte 0 .endm - .macro cry sample + .macro cry sample:req .byte 0x20, 60, 0, 0 .4byte \sample .byte 0xff, 0, 0xff, 0 .endm - .macro cry2 sample + .macro cry2 sample:req .byte 0x30, 60, 0, 0 .4byte \sample .byte 0xff, 0, 0xff, 0 -- cgit v1.2.3