Audio Interface and Synchronization in Audio Streaming Broadcast Custom Protocol

Hi Brandon,

Below is my required audio interface setup of the audio streaming broadcast custom protocol.

TX (DMIC) > TX (ASRC) --------------> RX (ASRC) > RX (OD)

Note: The audio capture is driven by DMIC at TX side, whereas the audio playback is driven by OD at RX side.

  1. Why do we need ASRC for both the TX and RX?
  2. How does it work to ensure the synchronization of audio sampling clocks at both the TX and RX side?

Hi @NEO,

Please see my feedback below:

This is done to ensure the Audio being received and played-back is synchronized between 3 sources, so no drift will occur due to any clock differences or inconsistencies.

For TX, these sources are:

  • The Input Audio Rate (In the case of DMIC this is sourced from RSL10 and is already in sync with System Clock).
  • The System Clock used to run the CM3 and LPDSP32.
  • The Remote Mic Protocol Packet Rate.

For RX, these sources are:

  • The expected Remote Mic Protocol Packet Rate (we to receive an audio packet every transmission interval [10ms] which contains 160 compressed audio samples).
  • The System Clock used to run the CM3 and LPDSP32.
  • The Audio Playback Rate (In the case of OD this is also sourced from RSL10 and is already in sync with the System Clock).

This can be done by using interpolation between the samples received to generate a new sample that better fits with the System Clock and the Remote Mic Packet Rate / Audio Playback Rate that is expected.

A good outline of the math being done can be found in our Knowledge Base at KB: Asynchronous Sample Rate Converter (ASRC) & Audio Sink Clock Counter (ASCC) Functionality.

For TX, you will essentially provide it with a fixed Remote Mic Packet Rate that aligns with how often the Packets are being transmitted (Transmission Interval of the RMP is set to 10ms) and a BLE Trigger that is attached to the RMP (This is the Sink Clock). This Trigger will effectively tell the ASRC that it should expect the number of Audio Packets that can fit in the 10ms Transmission ready (By default, the ASRC will expect 160 audio samples to be ready every 10ms [16kHz]). The ASCC will then measure the Audio Sample Input Clock (This is the Source Clock) and use a ratio between the two to ensure that these 160 samples every 10ms are interpolated using the System Clock to synchronized (In this case, the DMIC Audio Clock).

For RX, the transaction is very similar, except the RMP/BLE Trigger will act as the Source Clock (But should still be expected every 10ms is a perfect world) and the Audio Playback Clock will act as the Sink Clock (In this case, the OD Audio Clock).