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

Ouverte
#11,873 6 commentaires 0 réactions 1 personne assignée Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

@mikeysklar y travaille déjà.

Depuis le 13/11/2026.

  • #11875 par @mikeysklar — ouverte

Évaluation

Cette issue n'a pas encore été évaluée.

Description

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

Langage dominant
C
Étoiles
4.6k
Forks
1.4k
Merge moyen
1 j
PR mergées (30 j)
212

Préparer son environnement

Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de adafruit/circuitpython

Toutes les issues de adafruit/circuitpython

Issues similaires

Plus d'issues C

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.