I2S audio playback is garbled for tone and mp3 playback on Metro ESP32-P4

Abierto
#11,873 6 comentarios 0 reacciones 1 asignado Ver en GitHub

Los mantenedores suelen responder en 1 día

@mikeysklar ya está trabajando en esto.

Desde el 13/11/2026.

  • #11875 de @mikeysklar — abierto

Evaluación

Este issue todavía no se ha evaluado.

Descripción

bug
CircuitPython version and board name
Adafruit CircuitPython 11.0.0-alpha.3 on 2026-11-12; Adafruit Metro ESP32-P4 with ESP32P4
Code/REPL
# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries
# SPDX-License-Identifier: MIT
"""
CircuitPython I2S Tone playback example.
Plays a tone for one second on, one
second off, in a loop.
"""
import time
import array
import math
import audiocore
import board
import audiobusio

audio = audiobusio.I2SOut(board.D9, board.D10, board.D11)

tone_volume = 0.1  # Increase this to increase the volume of the tone.
frequency = 440  # Set this to the Hz of the tone you want to generate.
length = 8000 // frequency
sine_wave = array.array("h", [0] * length)
for i in range(length):
    sine_wave[i] = int((math.sin(math.pi * 2 * i / length)) * tone_volume * (2 ** 15 - 1))
sine_wave_sample = audiocore.RawSample(sine_wave)

while True:
    audio.play(sine_wave_sample, loop=True)
    time.sleep(1)
    audio.stop()
    time.sleep(1)
Behavior

When playing back this tone, the audio crackles and can sound garbled. This behavior is also present with mp3 playback, which is how i first came across the issue.

here is test mp3 code:

import board
from audiomp3 import MP3Decoder
import audiobusio

mp3files = ["slow.mp3", "happy.mp3"]

mp3 = open(mp3files[0], "rb")
decoder = MP3Decoder(mp3)
audio = audiobusio.I2SOut(board.D9, board.D10, board.D11)

while True:
    for filename in mp3files:
        decoder.file = open(filename, "rb")
        audio.play(decoder)
        print("playing", filename)
        while audio.playing:
            pass

mp3 files are available here on learn repo: https://github.com/adafruit/Adafruit_Learning_System_Guides/tree/main/CircuitPython_Essentials/CircuitPython_Audio_Out_MP3

Description

i tested with the max98357a stereo dac and pcm5122 line out dac to rule out a speaker issue.

Additional information

the issue is not present with wav file playback. i ran the street chicken example with both DACs:

import audiocore
import board
import audiobusio

audio = audiobusio.I2SOut(board.D9, board.D10, board.D11)

with open("StreetChicken.wav", "rb") as wave_file:
    wav = audiocore.WaveFile(wave_file)

    print("Playing wav file!")
    audio.play(wav)
    while audio.playing:
        pass

print("Done!")

(wav file here: https://github.com/adafruit/Adafruit_Learning_System_Guides/blob/main/PCM510x_Examples/CircuitPython_WAV/StreetChicken.wav)

and that plays clearly

Lenguaje dominante
C
Estrellas
4.6k
Forks
1.4k
Merge medio
1 d
PR fusionados (30 d)
212

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de adafruit/circuitpython

Todos los issues de adafruit/circuitpython

Issues similares

Más issues de C

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.