{"adoption": {"forks": 422, "observed_at": "2026-08-28T04:05:21.615479+00:00", "stars": 1682}, "canonical_url": "https://ross.abutalabs.com/products/esp32-audioi2s", "card": {"archived": false, "artifact_type": "library", "description": "Play mp3 files from SD via I2S", "domain": ["embedded-systems", "iot"], "enriched": true, "function": ["audio-processing", "parser", "http-client"], "health_score": 100, "homepage": null, "language": "C", "license": "GPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["schreibfaul1/ESP32-audioI2S"], "name": "schreibfaul1/ESP32-audioI2S", "platform": ["embedded", "iot", "cpp"], "pushed_at": "2026-08-26T15:34:15+00:00", "repo": "schreibfaul1/ESP32-audioI2S", "stars": 1682, "tags": ["esp32", "i2s", "mp3", "flac", "opus", "aac", "web-radio", "arduino", "max98357a", "pcm5102a", "audio-streaming", "google-tts", "audio"], "topics": ["esp32", "max98357a", "i2s", "mp3", "pcm5102a", "aac", "google-tts", "webradio", "opus", "flac", "cs4344", "m4a", "vorbis"], "urls": [], "use_cases": ["play mp3 files from an SD card on ESP32", "build an ESP32 internet radio with web streams", "stream audio to a MAX98357A I2S amplifier", "play FLAC and Opus files on ESP32-S3", "add Google TTS speech playback to an ESP32 project", "decode m3u8 HLS audio streams on embedded hardware"], "what_it_is": "An Arduino/ESP32 library that plays audio files and streams (MP3, AAC, FLAC, WAV, Opus, Vorbis) through external I2S DACs like the MAX98357A or PCM5102A. It supports sources such as SD cards, HTTP web radio streams, m3u8 playlists, Google TTS, and OpenAI speech.", "when_to_avoid": ["you are using ESP32-S2, ESP32-C3, or other single-core chips that are unsupported", "you need audio output via the built-in DAC or Bluetooth audio input", "your project is not on the Arduino/ESP32 platform"], "when_to_choose": ["you need audio playback on ESP32, ESP32-S3, or ESP32-P4 with an external I2S DAC", "you want to stream web radio or play multiple audio codecs from SD card in Arduino", "you need a lightweight C++ audio decoder without an RTOS audio stack"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/esp32-audioi2s", "repo": "schreibfaul1/ESP32-audioI2S", "role": "main", "score": 98}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:21.615479+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:41:23.332133+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f69a3bc328d3c16367de0ff7e70db361c937b458b69e7e66239491e691ae7e1a", "fetched_at": "2026-08-28T04:05:21.615479+00:00", "kind": "readme", "missing": false, "url": "https://github.com/schreibfaul1/ESP32-audioI2S"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:21.615479+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:41:23.332133+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f69a3bc328d3c16367de0ff7e70db361c937b458b69e7e66239491e691ae7e1a", "fetched_at": "2026-08-28T04:05:21.615479+00:00", "kind": "readme", "missing": false, "url": "https://github.com/schreibfaul1/ESP32-audioI2S"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:41:23.332133+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f69a3bc328d3c16367de0ff7e70db361c937b458b69e7e66239491e691ae7e1a", "fetched_at": "2026-08-28T04:05:21.615479+00:00", "kind": "readme", "missing": false, "url": "https://github.com/schreibfaul1/ESP32-audioI2S"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:05:21.615479+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:21.615479+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:21.615479+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:41:23.332133+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f69a3bc328d3c16367de0ff7e70db361c937b458b69e7e66239491e691ae7e1a", "fetched_at": "2026-08-28T04:05:21.615479+00:00", "kind": "readme", "missing": false, "url": "https://github.com/schreibfaul1/ESP32-audioI2S"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:21.615479+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:21.615479+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:41:23.332133+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f69a3bc328d3c16367de0ff7e70db361c937b458b69e7e66239491e691ae7e1a", "fetched_at": "2026-08-28T04:05:21.615479+00:00", "kind": "readme", "missing": false, "url": "https://github.com/schreibfaul1/ESP32-audioI2S"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:21.615479+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:21.615479+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:21.615479+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:41:23.332133+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f69a3bc328d3c16367de0ff7e70db361c937b458b69e7e66239491e691ae7e1a", "fetched_at": "2026-08-28T04:05:21.615479+00:00", "kind": "readme", "missing": false, "url": "https://github.com/schreibfaul1/ESP32-audioI2S"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:21.615479+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:21.615479+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:41:23.332133+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f69a3bc328d3c16367de0ff7e70db361c937b458b69e7e66239491e691ae7e1a", "fetched_at": "2026-08-28T04:05:21.615479+00:00", "kind": "readme", "missing": false, "url": "https://github.com/schreibfaul1/ESP32-audioI2S"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:41:23.332133+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f69a3bc328d3c16367de0ff7e70db361c937b458b69e7e66239491e691ae7e1a", "fetched_at": "2026-08-28T04:05:21.615479+00:00", "kind": "readme", "missing": false, "url": "https://github.com/schreibfaul1/ESP32-audioI2S"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:41:23.332133+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f69a3bc328d3c16367de0ff7e70db361c937b458b69e7e66239491e691ae7e1a", "fetched_at": "2026-08-28T04:05:21.615479+00:00", "kind": "readme", "missing": false, "url": "https://github.com/schreibfaul1/ESP32-audioI2S"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:41:23.332133+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f69a3bc328d3c16367de0ff7e70db361c937b458b69e7e66239491e691ae7e1a", "fetched_at": "2026-08-28T04:05:21.615479+00:00", "kind": "readme", "missing": false, "url": "https://github.com/schreibfaul1/ESP32-audioI2S"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 96}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2866, "days_push": 7, "days_rel": 27, "gap_med": 30, "n_releases_24m": 14}, "score": 98, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}