I2S audio playback is garbled for tone and mp3 playback on Metro ESP32-P4
Maintainers usually reply within 1 day
Assessment
This issue has not been assessed yet.
Description
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
- Dominant language
- C
- Stars
- 4.6k
- Forks
- 1.4k
- Avg merge
- 1d
- Merged PRs (30d)
- 212
Getting set up
This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from adafruit/circuitpython
-
documentation
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
adafruit/circuitpython#11877 ·
Maintainers usually reply within 1 day
-
documentation rp2
Difficulty 1/5 1-3 hours Newbie friendliness 67/100
adafruit/circuitpython#11779 · 1 comment ·
Maintainers usually reply within 1 day
-
documentation enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 67/100
adafruit/circuitpython#11689 ·
Maintainers usually reply within 1 day
-
esp32-c3 memory optimization network
Difficulty 5/5 Over a week Newbie friendliness 12/100
adafruit/circuitpython#11879 ·
Maintainers usually reply within 1 day
-
bug
Difficulty 4/5 3-5 days Newbie friendliness 25/100
adafruit/circuitpython#11876 ·
Maintainers usually reply within 1 day
All issues in adafruit/circuitpython
Similar issues
-
build: man page directory doubledPossibly taken @zeusgoose claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
-
ATtiny xy2: Missing #else path may lead to inconsistencies in core digital_pin_to_timer[] arrayOpen
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
SpenceKonde/megaTinyCore#1294 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
ROCm/rocm-libraries#15866 ·
Maintainers usually reply within 2 days
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 80/100
-
更新笔记收藏里的 AIHOT 官网地址Open
Difficulty 1/5 Under an hour Newbie friendliness 75/100