跳转到内容

Speaker Source Media Player

speaker_source 媒体播放器平台协调产生音频的媒体源组件。收到媒体 URL 时,平台根据 URI 前缀将其路由到相应的源。例如,以 audio-file:// 开头的 URL 由 Audio File 媒体源 处理。

它支持两条独立的音频流水线:媒体和公告。每条流水线必须输出到唯一的扬声器。使用混合器扬声器组件创建两个不同的扬声器,输出到同一个音频扬声器。

每条流水线维护自己的播放列表,支持重复(关闭、单曲、全部)和随机播放模式。音量和静音状态持久化到闪存并在重启时恢复。

此平台仅适用于使用 ESP-IDF 框架 的 ESP32 芯片。

WARNING

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

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

# 最小配置条目示例
audio_file:
- id: alert_sound
file: "sounds/alert.wav"
media_source:
- platform: audio_file
id: file_source
media_player:
- platform: speaker_source
media_pipeline:
speaker: my_speaker_id
sources:
- file_source
  • media_pipeline(可选,Pipeline Schema):媒体流水线的配置设置。media_pipeline 和 announcement_pipeline 至少需要指定一个。

    • speaker(必需,ID):输出音频的扬声器。
    • sources(必需,list of IDs):此流水线要使用的媒体源组件 ID 列表。至少需要一个源。收到媒体 URL 时,流水线会找到能处理该 URI 前缀的第一个源。每个源只能属于一条流水线;如果两条流水线需要相同类型的源,请配置单独的实例。
    • format(可选,enum):Home Assistant 在将音频发送到设备之前将其转码的音频格式。可选 FLAC、MP3、OPUS、WAV 或 NONE。NONE 将禁用 Home Assistant 中的转码;ESPHome 随后将为所有支持的编解码器(FLAC、MP3、OPUS 和 WAV)编译支持,这将增加固件大小。若要在不将此设置为 NONE 的情况下编译额外编解码器,请使用 Audio 组件。默认为 FLAC。
    • sample_rate(可选,positive integer):转码音频的采样率。应被配置的 speaker 组件支持。默认为扬声器的采样率。OPUS 编解码器仅支持 48000 采样率。
    • num_channels(可选,positive integer):转码音频的通道数。必须为 1 或 2。默认为扬声器的通道数。
  • announcement_pipeline(可选,Pipeline Schema):公告流水线的配置设置。选项与 media_pipeline 相同。必须使用与 media_pipeline 不同的扬声器。

  • volume_increment(可选,percentage):media_player.volume_up 和 media_player.volume_down 操作调高或调低音量的增量。默认为 5%。

  • volume_initial(可选,percentage):首次启动且之前未保存音量时使用的默认音量。默认为 50%。

  • volume_min(可选,percentage):允许的最小音量。默认为 0%。

  • volume_max(可选,percentage):允许的最大音量。默认为 100%。

  • on_mute(可选,Automation):静音时执行的自动化。

  • on_unmute(可选,Automation):取消静音时执行的自动化。

  • on_volume(可选,Automation):音量更改时执行的自动化。

  • 媒体播放器 的所有其他选项

本示例配置了一个使用 I²S Audio 扬声器 的双流水线设置,使用 mixer 扬声器合并两条流水线,并使用 resampler 扬声器进行采样率匹配。两条流水线均使用 Audio File 媒体源。

audio_file:
- id: alert_sound
file: "sounds/alert.wav"
media_source:
- platform: audio_file
id: announcement_file_source
- platform: audio_file
id: media_file_source
i2s_audio:
i2s_lrclk_pin: GPIOXX
i2s_bclk_pin: GPIOXX
sample_rate: 48000
speaker:
- platform: i2s_audio
id: speaker_id
dac_type: external
i2s_dout_pin: GPIOXX
sample_rate: 48000
- platform: mixer
id: mixer_speaker_id
output_speaker: speaker_id
source_speakers:
- id: announcement_spk_mixer_input
- id: media_spk_mixer_input
- platform: resampler
id: media_spk_resampling_input
output_speaker: media_spk_mixer_input
- platform: resampler
id: announcement_spk_resampling_input
output_speaker: announcement_spk_mixer_input
media_player:
- platform: speaker_source
name: "Speaker Source Media Player"
id: speaker_source_media_player_id
media_pipeline:
speaker: media_spk_resampling_input
format: FLAC
num_channels: 2
sources:
- media_file_source
announcement_pipeline:
speaker: announcement_spk_resampling_input
format: FLAC
num_channels: 1
sources:
- announcement_file_source

此操作设置流水线播放列表中连续曲目之间的延迟。可用于在公告文件或媒体曲目之间添加暂停。

on_...:
- speaker_source.set_playlist_delay:
id: speaker_source_media_player_id
pipeline: media
delay: 500ms

配置变量:

  • id(必需,ID):要控制的扬声器源媒体播放器。
  • pipeline(必需,enum):要为其设置延迟的流水线。可选 media 或 announcement。
  • delay(必需,Time,templatable):播放列表曲目之间的延迟。

此平台支持所有媒体播放器操作,包括 play、pause、stop、toggle、volume_set、volume_up、volume_down、mute、unmute、next、previous、repeat_off、repeat_one、repeat_all、shuffle、unshuffle 和 clear_playlist。

使用 media_player.play_media 操作时,媒体 URL 会路由到流水线中能处理该 URI 前缀的第一个源。例如,以 audio-file:// 开头的 URL 会路由到 Audio File 媒体源。