跳转到内容

Router Speaker

router speaker 平台允许您在运行时切换哪个 speaker 组件 接收音频。路由器充当单个扬声器,音频生产者(如 media player 或 mixer speaker)将音频发送到它,它再将音频转发到当前 活动的输出扬声器。使用 切换输出动作 可以在 播放音频时更改活动输出,例如在 I²S 扬声器和 SPDIF 输出之间切换播放。

每个输出扬声器必须使用相同的音频格式。格式在路由器上声明,以便生产者可以在 切换时保持 流式传输,而无需重新配置其输出。

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

# 示例配置条目
speaker:
- platform: router
output_speakers:
- speaker_a_id
- speaker_b_id
bits_per_sample: 16
num_channels: 2
sample_rate: 48000
  • output_speakers (必填, ID 列表): 扬声器 列表,路由器可以向其输出。必须至少有 2 个且最多 8 个扬声器。列出的第一个 扬声器在设备启动时是活动输出。
  • bits_per_sample (必填, 正整数): 音频流的位深度。必须在 8 和 32 之间。 每个输出扬声器必须使用此位深度。
  • num_channels (必填, 正整数): 音频声道数。可选值为 1 或 2。每个输出 扬声器必须使用此声道数。
  • sample_rate (必填, 正整数): 音频流的采样率,单位为 Hz。必须在 8000 和 96000 之间。每个输出扬声器必须使用此采样率。

此动作将活动输出切换到指定的扬声器。目标必须是配置的 output_speakers 之一。

on_...:
- router.speaker.switch_output:
target_speaker: speaker_b_id

配置变量:

  • id (可选, ID): 要控制的路由器扬声器。默认为 您的 YAML 中唯一的一个。
  • target_speaker (必填, ID, 可模板化): 要切换到的输出扬声器。必须是配置的 output_speakers 之一。

NOTE

在播放音频时切换输出会丢弃之前输出上仍缓冲的任何音频。这会在切换时刻产生短暂的 不连续。

将路由器与 template select 配对,可以从前端(如 Home Assistant)选择活动输出。select 的 on_value 触发器调用切换输出动作,将每个选项 映射到一个已配置的输出扬声器。这两个引用的扬声器是 在 YAML 的其他地方配置的 I²S 音频扬声器。

speaker:
- platform: router
id: router_id
output_speakers:
- spdif_speaker_id
- analog_speaker_id
bits_per_sample: 16
num_channels: 2
sample_rate: 48000
select:
- platform: template
name: "音频输出"
optimistic: true
restore_value: true
options:
- "SPDIF (TOSLINK)"
- "Analog (I2S)"
on_value:
- router.speaker.switch_output:
id: router_id
target_speaker: !lambda |-
if (x == "SPDIF (TOSLINK)") {
return id(spdif_speaker_id);
}
return id(analog_speaker_id);