跳转到内容

I²S 音频扬声器

i2s_audio speaker 平台允许您通过 I2S 音频 接收音频。

此平台仅适用于基于 ESP32 的芯片。

WARNING

音频和语音组件会在设备上消耗大量资源(RAM、CPU)。

如果在设备的 配置中包含太多额外的组件,很可能会发生崩溃。特别是,蓝牙/BLE 组件在使用时已知 会导致与语音助手和/或其他音频组件组合使用时出现问题。

# 示例配置条目
speaker:
- platform: i2s_audio
dac_type: external
i2s_dout_pin: GPIOXX
  • dac_type (必填, enum): 必须为 external。使用外部 DAC,例如 ES8311 或 ES8388。

  • i2s_dout_pin (必填, Pin Schema): 用于 I²S DOUT(数据输出)信号的 GPIO 引脚。

  • channel (可选, enum): 扬声器的声道。可选值为 left、right、mono 或 stereo。如果为 stereo,输入数据应为两倍大小, 每个右声道采样后面跟随一个左声道采样。left 和 right 会静音未使用的声道,而 mono 则在两个声道上播放相同的采样。默认为 mono。

  • sample_rate (可选, 正整数): I2S 采样率。如果处于 primary I²S 模式,则使用音频流的采样率。默认为 16000。

  • bits_per_sample (可选, enum): 发送到 DAC 的音频采样的位深度。可选值为 8bit、16bit、24bit 或 32bit。默认为 16bit。

  • mclk_multiple (可选, enum): MCLK 频率与采样率的倍数。如果使用 24 位采样,则必须能被 3 整除。可选值为 128、256、384、512。默认为 256。

  • use_apll (可选, boolean): I2S 使用 APLL 作为主 I2S 时钟,启用它可获得准确的时钟。默认为 false。

  • i2s_mode (可选, enum): 要使用的 I²S 模式。可选值为 primary(由主机驱动时钟)或 secondary(由连接的设备驱动时钟)。默认为 primary。

  • i2s_audio_id (可选, ID): 您要为此扬声器使用的 I²S 音频 的 ID。

  • i2s_comm_fmt (可选, enum): 此扬声器使用的 I²S 通信标准格式。

    • stand_i2s(默认)
    • stand_msb
    • stand_pcm_short
    • stand_pcm_long
    • i2s_msb
    • i2s_lsb
    • pcm
    • pcm_short
    • pcm_long
  • buffer_duration (可选, 时间): 内部环形缓冲区的持续时间。较大的值可以减少卡顿但会使用更多内存。默认为 500ms。

  • timeout (可选, 时间): 播放结束后等待多长时间再释放总线。设置为 never 可永不因超时而停止扬声器。默认为 500ms。注意: 使用 spdif_mode: true(见下文)时,缓冲区下溢将用静音帧填充,直到指定间隔届满;这可以维持 SPDIF 信号以防止接收器检测到信号丢失/源更改,否则可能会延长静音间隔。

  • spdif_mode (可选, boolean): 启用 S/PDIF(Sony/Philips 数字接口)模式以进行数字音频输出。启用后,扬声器输出适合光纤(TOSLINK 光纤连接器)或同轴数字音频传输的 SPDIF 编码位流格式。默认为 false。

  • Speaker 组件 中的所有其他选项。

SPDIF 模式启用通过光纤(TOSLINK)或同轴数字音频连接进行 S/PDIF(Sony/Philips 数字接口)数字音频传输。此模式将 PCM 音频数据格式编码为 SPDIF 位流,可被soundbar、A/V 接收器、DAC 和其他数字音频设备接收。

对于光纤 SPDIF 传输,您可以使用:

  • 普通 LED:任何 LED(甚至是开发板上的调试 LED)都可以传输 SPDIF 音频。将光纤线缆靠近 LED。
  • TOSLINK 发射模块:专用的光纤发射模块提供合适的 TOSLINK 连接器以实现可靠的连接。

发射器连接到 i2s_dout_pin(与标准 I²S 数据输出相同的引脚)。

当启用 spdif_mode 时,需要以下设置:

  • sample_rate:仅支持 44100 Hz(CD 音质)或 48000 Hz(DVD/DAT 音质)
  • channel:必须设置为 stereo(2 声道)
  • use_apll:必须设置为 true 以进行准确的时钟生成
  • i2s_mode:必须设置为 primary
  • i2s_comm_fmt:必须设置为 stand_i2s
  • mclk_multiple:必须设置为 256
# 示例 SPDIF 扬声器配置
i2s_audio:
- id: i2s_output
speaker:
- platform: i2s_audio
id: spdif_speaker
dac_type: external
i2s_audio_id: i2s_output
i2s_dout_pin: GPIOXX
spdif_mode: true
use_apll: true
sample_rate: 48000
channel: stereo
timeout: never