{"adoption": {"forks": 393, "observed_at": "2026-08-28T04:07:15.721482+00:00", "stars": 2724}, "canonical_url": "https://ross.abutalabs.com/products/esp32-a2dp", "card": {"archived": false, "artifact_type": "library", "description": "A Simple ESP32 Bluetooth A2DP Library (to implement a Music Receiver or Sender) that supports Arduino, PlatformIO and Espressif IDF", "domain": ["embedded-systems", "hardware"], "enriched": true, "function": ["audio-processing", "sdk"], "health_score": 97, "homepage": null, "language": "C++", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["pschatzmann/ESP32-A2DP"], "name": "pschatzmann/ESP32-A2DP", "platform": ["embedded", "cpp", "iot"], "pushed_at": "2026-08-12T02:24:20+00:00", "repo": "pschatzmann/ESP32-A2DP", "stars": 2724, "tags": ["bluetooth-a2dp", "esp32", "arduino", "i2s", "bluetooth-speaker", "avrcp", "platformio", "esp-idf", "audio"], "topics": ["bluetooth", "pcm-data", "arduino-library", "a2dp-source", "audio", "esp32", "esp32-arduino", "a2dp-sink", "bluetooth-speaker"], "urls": [], "use_cases": ["build a DIY bluetooth speaker with ESP32", "stream audio from my phone to an ESP32 over bluetooth", "send audio from ESP32 to bluetooth headphones", "receive A2DP audio and output it via I2S", "add bluetooth audio streaming to an Arduino project", "control bluetooth audio playback with AVRCP from ESP32"], "what_it_is": "An Arduino/PlatformIO/ESP-IDF library for ESP32 that implements the Bluetooth A2DP protocol for streaming audio, acting as either a sink (music receiver) or source (sender). It outputs decoded PCM data via callbacks or I2S, with AVRCP remote control support.", "when_to_avoid": ["you need hands-free profile (HFP) or headset profile (HSP) for calls", "you need standalone AVRCP without A2DP", "you are not targeting the ESP32 microcontroller"], "when_to_choose": ["you want a simple Arduino-friendly API for A2DP audio streaming on ESP32", "you need both sink and source roles for bluetooth audio", "you want PCM data via callbacks to feed custom outputs like I2S"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/esp32-a2dp", "repo": "pschatzmann/ESP32-A2DP", "role": "main", "score": 90}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:15.721482+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:14:55.707052+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "09f8eb1d8c25aab3131a2dcbd7361c8b5c58f4732ff2cf0b855aa103c6ea4fca", "fetched_at": "2026-08-28T04:07:15.721482+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pschatzmann/ESP32-A2DP"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:15.721482+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:14:55.707052+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "09f8eb1d8c25aab3131a2dcbd7361c8b5c58f4732ff2cf0b855aa103c6ea4fca", "fetched_at": "2026-08-28T04:07:15.721482+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pschatzmann/ESP32-A2DP"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:14:55.707052+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "09f8eb1d8c25aab3131a2dcbd7361c8b5c58f4732ff2cf0b855aa103c6ea4fca", "fetched_at": "2026-08-28T04:07:15.721482+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pschatzmann/ESP32-A2DP"}], "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:07:15.721482+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:15.721482+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:15.721482+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:14:55.707052+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "09f8eb1d8c25aab3131a2dcbd7361c8b5c58f4732ff2cf0b855aa103c6ea4fca", "fetched_at": "2026-08-28T04:07:15.721482+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pschatzmann/ESP32-A2DP"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:15.721482+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:15.721482+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:14:55.707052+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "09f8eb1d8c25aab3131a2dcbd7361c8b5c58f4732ff2cf0b855aa103c6ea4fca", "fetched_at": "2026-08-28T04:07:15.721482+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pschatzmann/ESP32-A2DP"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:15.721482+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:15.721482+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:15.721482+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:14:55.707052+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "09f8eb1d8c25aab3131a2dcbd7361c8b5c58f4732ff2cf0b855aa103c6ea4fca", "fetched_at": "2026-08-28T04:07:15.721482+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pschatzmann/ESP32-A2DP"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:15.721482+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:15.721482+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:14:55.707052+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "09f8eb1d8c25aab3131a2dcbd7361c8b5c58f4732ff2cf0b855aa103c6ea4fca", "fetched_at": "2026-08-28T04:07:15.721482+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pschatzmann/ESP32-A2DP"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:14:55.707052+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "09f8eb1d8c25aab3131a2dcbd7361c8b5c58f4732ff2cf0b855aa103c6ea4fca", "fetched_at": "2026-08-28T04:07:15.721482+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pschatzmann/ESP32-A2DP"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:14:55.707052+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "09f8eb1d8c25aab3131a2dcbd7361c8b5c58f4732ff2cf0b855aa103c6ea4fca", "fetched_at": "2026-08-28T04:07:15.721482+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pschatzmann/ESP32-A2DP"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:14:55.707052+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "09f8eb1d8c25aab3131a2dcbd7361c8b5c58f4732ff2cf0b855aa103c6ea4fca", "fetched_at": "2026-08-28T04:07:15.721482+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pschatzmann/ESP32-A2DP"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 97, "longevity": 100, "rhythm": 74}, "computed_at": "2026-09-03T02:39:23.370411+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2350, "days_push": 22, "days_rel": 95, "gap_med": 53, "n_releases_24m": 8}, "score": 90, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}