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_sourcespeaker_source.set_playlist_delay 操作
Section titled “speaker_source.set_playlist_delay 操作”此操作设置流水线播放列表中连续曲目之间的延迟。可用于在公告文件或媒体曲目之间添加暂停。
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):播放列表曲目之间的延迟。
基础媒体播放器操作
Section titled “基础媒体播放器操作”此平台支持所有媒体播放器操作,包括 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 媒体源。