diff options
Diffstat (limited to 'src/sequencer.c')
-rw-r--r-- | src/sequencer.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/sequencer.c b/src/sequencer.c index 66f1d24..f8b4a58 100644 --- a/src/sequencer.c +++ b/src/sequencer.c | |||
@@ -250,6 +250,7 @@ play_step(void) { | |||
250 | wave_env = WAV_ENV_OFF; | 250 | wave_env = WAV_ENV_OFF; |
251 | SOUND_WAVE_MODE |= SOUND_WAVE_ENABLE; | 251 | SOUND_WAVE_MODE |= SOUND_WAVE_ENABLE; |
252 | SOUND_WAVE_FREQ = SOUND_FREQ_RESET | sound_rates[trig->note]; | 252 | SOUND_WAVE_FREQ = SOUND_FREQ_RESET | sound_rates[trig->note]; |
253 | wave_env_ticks = 0; | ||
253 | } break; | 254 | } break; |
254 | } | 255 | } |
255 | wave_freq = sound_rates[trig->note]; | 256 | wave_freq = sound_rates[trig->note]; |
@@ -371,6 +372,8 @@ env_start: | |||
371 | if (wave_env_attack == 0) { | 372 | if (wave_env_attack == 0) { |
372 | memcpy32(SOUND_WAVE_RAM, wave_target, 16); | 373 | memcpy32(SOUND_WAVE_RAM, wave_target, 16); |
373 | SOUND_WAVE_MODE ^= SOUND_WAVE_BANK_SELECT(1); | 374 | SOUND_WAVE_MODE ^= SOUND_WAVE_BANK_SELECT(1); |
375 | memcpy32(SOUND_WAVE_RAM, wave_target, 16); | ||
376 | SOUND_WAVE_MODE ^= SOUND_WAVE_BANK_SELECT(1); | ||
374 | } else { | 377 | } else { |
375 | wave_env = WAV_ENV_ATTACK; | 378 | wave_env = WAV_ENV_ATTACK; |
376 | goto env_start; | 379 | goto env_start; |
@@ -399,9 +402,9 @@ env_start: | |||
399 | if (wave_env_decay == 0) { | 402 | if (wave_env_decay == 0) { |
400 | wave_env = WAV_ENV_OFF; | 403 | wave_env = WAV_ENV_OFF; |
401 | } else { | 404 | } else { |
402 | wave_env_prog = 0; | ||
403 | wave_env = WAV_ENV_DECAY; | 405 | wave_env = WAV_ENV_DECAY; |
404 | } | 406 | } |
407 | wave_env_prog = 0; | ||
405 | } | 408 | } |
406 | for (size_t j = 0; j < 4; j++) { | 409 | for (size_t j = 0; j < 4; j++) { |
407 | u32 next = 0; | 410 | u32 next = 0; |
@@ -451,6 +454,7 @@ env_start: | |||
451 | int power = powers[wave_env_prog]; | 454 | int power = powers[wave_env_prog]; |
452 | if (++wave_env_prog >= 8) { | 455 | if (++wave_env_prog >= 8) { |
453 | wave_env = WAV_ENV_END; | 456 | wave_env = WAV_ENV_END; |
457 | wave_env_prog = 0; | ||
454 | } | 458 | } |
455 | for (size_t j = 0; j < 4; j++) { | 459 | for (size_t j = 0; j < 4; j++) { |
456 | u32 next = 0; | 460 | u32 next = 0; |
@@ -491,12 +495,20 @@ env_start: | |||
491 | SOUND_WAVE_FREQ = SOUND_FREQ_RESET; | 495 | SOUND_WAVE_FREQ = SOUND_FREQ_RESET; |
492 | SOUND_WAVE_CTRL = SOUND_WAVE_MUTE; | 496 | SOUND_WAVE_CTRL = SOUND_WAVE_MUTE; |
493 | wave_env = WAV_ENV_END; | 497 | wave_env = WAV_ENV_END; |
498 | SOUND_WAVE_MODE = SOUND_WAVE_BANK_SELECT(0); | ||
499 | memcpy32(SOUND_WAVE_RAM, wave_zero, 16); | ||
500 | SOUND_WAVE_MODE = SOUND_WAVE_BANK_SELECT(1); | ||
501 | memcpy32(SOUND_WAVE_RAM, wave_zero, 16); | ||
494 | } | 502 | } |
495 | return; | 503 | return; |
496 | } break; | 504 | } break; |
497 | case WAV_ENV_END: { | 505 | case WAV_ENV_END: { |
498 | SOUND_WAVE_FREQ = SOUND_FREQ_RESET; | 506 | SOUND_WAVE_FREQ = SOUND_FREQ_RESET; |
499 | SOUND_WAVE_CTRL = SOUND_WAVE_MUTE; | 507 | SOUND_WAVE_CTRL = SOUND_WAVE_MUTE; |
508 | SOUND_WAVE_MODE = SOUND_WAVE_BANK_SELECT(0); | ||
509 | memcpy32(SOUND_WAVE_RAM, wave_zero, 16); | ||
510 | SOUND_WAVE_MODE = SOUND_WAVE_BANK_SELECT(1); | ||
511 | memcpy32(SOUND_WAVE_RAM, wave_zero, 16); | ||
500 | return; | 512 | return; |
501 | } break; | 513 | } break; |
502 | } | 514 | } |