From ce603eecd09860c7ff89d922840114883c7916a3 Mon Sep 17 00:00:00 2001 From: Thomas Farstrike Date: Sat, 28 Feb 2026 18:18:30 +0100 Subject: [PATCH] Audio: disable MCK after playback if enabled --- internal_filesystem/lib/mpos/audio/stream_wav.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/internal_filesystem/lib/mpos/audio/stream_wav.py b/internal_filesystem/lib/mpos/audio/stream_wav.py index b688ae7e..255f81b8 100644 --- a/internal_filesystem/lib/mpos/audio/stream_wav.py +++ b/internal_filesystem/lib/mpos/audio/stream_wav.py @@ -195,6 +195,7 @@ class WAVStream: self._keep_running = True self._is_playing = False self._i2s = None + self._mck_pwm = None self._progress_samples = 0 self._total_samples = 0 self._duration_ms = None @@ -458,11 +459,11 @@ class WAVStream: from machine import Pin, PWM # Add MCLK generation on GPIO2 try: - mck_pwm = PWM(mck_pin) + self._mck_pwm = PWM(mck_pin) # Set frequency to sample_rate * 256 (common ratio for CJC4334H auto-detect) # Use duty_u16 for finer control (0–65535 range, 32768 = 50%) - mck_pwm.freq(playback_rate * 256) - mck_pwm.duty_u16(32768) # 50% duty cycle + self._mck_pwm.freq(playback_rate * 256) + self._mck_pwm.duty_u16(32768) # 50% duty cycle print(f"MCLK PWM started on GPIO2 at {playback_rate * 256} Hz") except Exception as e: print(f"MCLK PWM init failed: {e}") @@ -584,8 +585,15 @@ class WAVStream: finally: self._is_playing = False if self._i2s: - self._i2s.deinit() + print("Done playing, doing i2s deinit") + self._i2s.deinit() # disabling this does not fix the "play just once" issue self._i2s = None + if self._mck_pwm: + try: + print("Done playing, stopping MCLK PWM") + self._mck_pwm.deinit() + finally: + self._mck_pwm = None def set_volume(self, vol): self.volume = vol