ESPHome 2025.5.0
Loading...
Searching...
No Matches
speaker_media_player.h
Go to the documentation of this file.
1#pragma once
2
3#ifdef USE_ESP_IDF
4
5#include "audio_pipeline.h"
6
8
11
15
16#include <deque>
17#include <freertos/FreeRTOS.h>
18#include <freertos/queue.h>
19
20namespace esphome {
21namespace speaker {
22
31
36
38 float volume;
40};
41
43 public:
44 float get_setup_priority() const override { return esphome::setup_priority::PROCESSOR; }
45 void setup() override;
46 void loop() override;
47
48 // MediaPlayer implementations
50 bool is_muted() const override { return this->is_muted_; }
51
52 void set_buffer_size(size_t buffer_size) { this->buffer_size_ = buffer_size; }
53 void set_task_stack_in_psram(bool task_stack_in_psram) { this->task_stack_in_psram_ = task_stack_in_psram; }
54
55 // Percentage to increase or decrease the volume for volume up or volume down commands
56 void set_volume_increment(float volume_increment) { this->volume_increment_ = volume_increment; }
57
58 void set_volume_max(float volume_max) { this->volume_max_ = volume_max; }
59 void set_volume_min(float volume_min) { this->volume_min_ = volume_min; }
60
61 void set_announcement_speaker(Speaker *announcement_speaker) { this->announcement_speaker_ = announcement_speaker; }
63 this->announcement_format_ = announcement_format;
64 }
65 void set_media_speaker(Speaker *media_speaker) { this->media_speaker_ = media_speaker; }
67 this->media_format_ = media_format;
68 }
69
70 Trigger<> *get_mute_trigger() const { return this->mute_trigger_; }
71 Trigger<> *get_unmute_trigger() const { return this->unmute_trigger_; }
73
74 void play_file(audio::AudioFile *media_file, bool announcement, bool enqueue);
75
76 void set_playlist_delay_ms(AudioPipelineType pipeline_type, uint32_t delay_ms);
77
78 protected:
79 // Receives commands from HA or from the voice assistant component
80 // Sends commands to the media_control_commanda_queue_
81 void control(const media_player::MediaPlayerCall &call) override;
82
84 void set_volume_(float volume, bool publish = true);
85
89 void set_mute_state_(bool mute_state);
90
93
96 inline bool single_pipeline_() { return (this->media_speaker_ == nullptr); }
97
98 // Processes commands from media_control_command_queue_.
100
101 std::unique_ptr<AudioPipeline> announcement_pipeline_;
102 std::unique_ptr<AudioPipeline> media_pipeline_;
105
108 bool media_repeat_one_{false};
110
115
117
118 std::deque<PlaylistItem> announcement_playlist_;
119 std::deque<PlaylistItem> media_playlist_;
120
122
124
125 bool is_paused_{false};
126 bool is_muted_{false};
127
128 // The amount to change the volume on volume up/down commands
130
133
134 // Used to save volume/mute state for restoration on reboot
136
140};
141
142} // namespace speaker
143} // namespace esphome
144
145#endif
optional< media_player::MediaPlayerSupportedFormat > announcement_format_
void set_announcement_format(const media_player::MediaPlayerSupportedFormat &announcement_format)
void save_volume_restore_state_()
Saves the current volume and mute state to the flash for restoration.
std::deque< PlaylistItem > announcement_playlist_
void set_volume_increment(float volume_increment)
void set_volume_(float volume, bool publish=true)
Updates this->volume and saves volume/mute state to flash for restortation if publish is true.
void set_task_stack_in_psram(bool task_stack_in_psram)
void play_file(audio::AudioFile *media_file, bool announcement, bool enqueue)
void set_mute_state_(bool mute_state)
Sets the mute state.
Trigger< float > * get_volume_trigger() const
void set_media_speaker(Speaker *media_speaker)
std::deque< PlaylistItem > media_playlist_
std::unique_ptr< AudioPipeline > media_pipeline_
optional< media_player::MediaPlayerSupportedFormat > media_format_
void control(const media_player::MediaPlayerCall &call) override
void set_media_format(const media_player::MediaPlayerSupportedFormat &media_format)
void set_playlist_delay_ms(AudioPipelineType pipeline_type, uint32_t delay_ms)
void set_announcement_speaker(Speaker *announcement_speaker)
std::unique_ptr< AudioPipeline > announcement_pipeline_
media_player::MediaPlayerTraits get_traits() override
bool single_pipeline_()
Returns true if the media player has only the announcement pipeline defined, false if both the announ...
const float PROCESSOR
For components that use data from sensors like displays.
Definition component.cpp:20
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7
optional< media_player::MediaPlayerCommand > command
optional< audio::AudioFile * > file
optional< audio::AudioFile * > file