Support us and view this ad

可选:点击以支持我们的网站

免费文章

Introduction: The Challenge of Auracast Reception on Embedded Hardware Auracast, the broadcast audio profile built upon Bluetooth LE Audio, represents a paradigm shift from connection-oriented audio streaming to a one-to-many broadcast model. For an embedded developer, building a receiver on an ESP32 presents a unique set of challenges. Unlike a simple A2DP sink, the Auracast receiver must handle LE Audio's Low Complexity Communication Codec (LC3), synchronize multiple isochronous streams (for multi-channel or multi-language audio), and manage real-time playback with minimal latency. This article provides a technical deep-dive into constructing such a receiver, focusing on the critical layers: the LE Audio stack, the Isochronous Adaptation Layer (IAL), and the audio rendering pipeline. Core Technical Principle: The Isochronous Stream and LE Audio Coding Auracast relies on the Bluetooth Core Specification v5.2's LE Isochronous Channels. The broadcaster transmits audio data in a series of timed events called "BIG events" (Broadcast Isochronous Group). Each BIG event contains one or more BISes (Broadcast Isochronous Streams), each carrying a single audio channel (e.g., left, right, or a specific language). The receiver must synchronize to the BIG's timing. The audio codec is LC3, which operates on 10ms or 7.5ms frames. The packet format for a BIS is defined by the HCI LE Set Extended Advertising Parameters and the LE ISO Data Path. A key technical detail is the SDU (Service Data Unit) and PDU (Protocol Data Unit) structure. For a single BIS, the PDU contains a header, the LC3 frame(s), and potentially a CRC. The timing diagram for the receiver is critical: BIG Anchor Point: The start of a BIG event. The receiver must wake up slightly before this point. BIS Offset: The time offset from the BIG anchor point to the start of a specific BIS PDU. Sub-Event: Each BIS can have multiple sub-events for retransmission. The receiver must listen for the first successful sub-event. // Pseudocode for BIG Synchronization Timing // Assuming BIG_Interval = 10ms, BIS_Offset[0] = 0.5ms, Sub_Interval = 0.2ms // Receiver must wake up at t = BIG_Anchor - 0.1ms (guard time) // Listen for PDU on BIS[0] at t = BIG_Anchor + BIS_Offset[0] // If CRC fails, listen for retransmission at t = BIG_Anchor + BIS_Offset[0] + Sub_Interval // Success: decode LC3 frame, push to audio buffer // Failure: concealment (e.g....

继续阅读完整内容

支持我们的网站,请点击查看下方广告

正在加载广告...

Login