// the find
schreibfaul1/ESP32-audioI2S
Play mp3 files from SD via I2S
An Arduino library for streaming and decoding audio on ESP32 chips via I2S to external DACs and amplifiers. It bundles its own decoders for MP3, AAC, FLAC, Opus, Vorbis, and WAV — no external codec chip required — and handles internet radio streams, SD card playback, Google TTS, and OpenAI speech. Aimed at hobbyists building audio projects on ESP32 dev boards.
All the heavy decoders (Helix MP3, faad2 AAC, Opus, Vorbis, FLAC) are compiled in and work on-chip, so you don't need a separate DSP or codec board. The fixed 48kHz I2S output is a practical choice — it means any Bluetooth sink or DAC just works without resampling surprises. The example coverage is wide: Ethernet boards, M5Stack variants, Google TTS, OpenAI speech, Bluetooth transmitter, and specific DAC chips each get their own directory with working code. Active maintenance with a last push yesterday suggests bug reports actually get addressed.
Hard PSRAM requirement means a lot of the cheapest/most common ESP32 boards are locked out, and the README buries this in a warning rather than explaining why PSRAM is needed or how much. The entire decoder surface lives in one giant Audio.cpp file — useful codebases don't look like that at scale, and debugging a decoder-level issue means hunting through thousands of lines of mixed concerns. ESP32-S2 and C3 are flat-out unsupported, which will surprise anyone who grabbed a random ESP32 board; there's no graceful fallback or stripped-down mode. Documentation is a GitHub wiki with no versioning, so if the API changes under you, there's no changelog telling you what broke.