From d29cc98240fcfcec78e1a772bbe5ff36c5e56d8d Mon Sep 17 00:00:00 2001 From: David Hoelscher Date: Tue, 22 Oct 2024 00:38:56 -0500 Subject: [PATCH] fixed tone playing after a rest, optimized tone stopping algorithm --- platforms/chibios/drivers/audio_pwm_hardware.c | 4 ++-- quantum/audio/audio.c | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/platforms/chibios/drivers/audio_pwm_hardware.c b/platforms/chibios/drivers/audio_pwm_hardware.c index ce1e8e26dd6..afa341abb60 100644 --- a/platforms/chibios/drivers/audio_pwm_hardware.c +++ b/platforms/chibios/drivers/audio_pwm_hardware.c @@ -49,7 +49,7 @@ void channel_1_set_frequency(float freq) { width = 0; } else { period = (pwmCFG.frequency / freq); - width = PWM_PERCENTAGE_TO_WIDTH(&AUDIO_PWM_DRIVER, (100 - note_timbre) * 100); + width = (pwmcnt_t)(((period) * (pwmcnt_t)((100 - note_timbre) * 100)) / (pwmcnt_t)(10000)); } chSysLockFromISR(); pwmChangePeriodI(&AUDIO_PWM_DRIVER, period); @@ -69,7 +69,7 @@ void channel_1_start(void) { void channel_1_stop(void) { pwmStop(&AUDIO_PWM_DRIVER); pwmStart(&AUDIO_PWM_DRIVER, &pwmCFG); - pwmEnableChannelI(&AUDIO_PWM_DRIVER, AUDIO_PWM_CHANNEL - 1, 0); + pwmEnableChannel(&AUDIO_PWM_DRIVER, AUDIO_PWM_CHANNEL - 1, 0); pwmStop(&AUDIO_PWM_DRIVER); } diff --git a/quantum/audio/audio.c b/quantum/audio/audio.c index b2611c5f099..802a62395b8 100644 --- a/quantum/audio/audio.c +++ b/quantum/audio/audio.c @@ -258,11 +258,10 @@ void audio_stop_tone(float pitch) { for (int i = AUDIO_TONE_STACKSIZE - 1; i >= 0; i--) { found = (tones[i].pitch == pitch); if (found) { - tones[i] = (musical_tone_t){.time_started = 0, .pitch = -1.0f, .duration = 0}; for (int j = i; (j < AUDIO_TONE_STACKSIZE - 1); j++) { tones[j] = tones[j + 1]; - tones[j + 1] = (musical_tone_t){.time_started = 0, .pitch = -1.0f, .duration = 0}; } + tones[AUDIO_TONE_STACKSIZE - 1] = (musical_tone_t){.time_started = 0, .pitch = -1.0f, .duration = 0}; break; } }