ESPHome 2026.5.3
Loading...
Searching...
No Matches
speaker.h
Go to the documentation of this file.
1#pragma once
2
3#include <cstddef>
4#include <cstdint>
5#include <vector>
6
7#ifdef USE_ESP32
8#include <freertos/FreeRTOS.h>
9#endif
10
13
15#ifdef USE_AUDIO_DAC
17#endif
18
19namespace esphome::speaker {
20
27
28class Speaker {
29 public:
30#ifdef USE_ESP32
37 virtual size_t play(const uint8_t *data, size_t length, TickType_t ticks_to_wait) {
38 return this->play(data, length);
39 };
40#endif
41
48 virtual size_t play(const uint8_t *data, size_t length) = 0;
49
50 size_t play(const std::vector<uint8_t> &data) { return this->play(data.data(), data.size()); }
51
52 virtual void start() = 0;
53 virtual void stop() = 0;
54 // In compare between *STOP()* and *FINISH()*; *FINISH()* will stop after emptying the play buffer,
55 // while *STOP()* will break directly.
56 // When finish() is not implemented on the platform component it should just do a normal stop.
57 virtual void finish() { this->stop(); }
58
59 // Pauses processing incoming audio. Needs to be implemented specifically per speaker component
60 virtual void set_pause_state(bool pause_state) {}
61 virtual bool get_pause_state() const { return false; }
62
63 virtual bool has_buffered_data() const = 0;
64
65 bool is_running() const { return this->state_ == STATE_RUNNING; }
66 bool is_stopped() const { return this->state_ == STATE_STOPPED; }
67
68 // Volume control is handled by a configured audio dac component. Individual speaker components can
69 // override and implement in software if an audio dac isn't available.
70 virtual void set_volume(float volume) {
71 this->volume_ = volume;
72#ifdef USE_AUDIO_DAC
73 if (this->audio_dac_ != nullptr) {
74 this->audio_dac_->set_volume(volume);
75 }
76#endif
77 };
78 virtual float get_volume() { return this->volume_; }
79
80 virtual void set_mute_state(bool mute_state) {
81 this->mute_state_ = mute_state;
82#ifdef USE_AUDIO_DAC
83 if (this->audio_dac_) {
84 if (mute_state) {
85 this->audio_dac_->set_mute_on();
86 } else {
87 this->audio_dac_->set_mute_off();
88 }
89 }
90#endif
91 }
92 virtual bool get_mute_state() { return this->mute_state_; }
93
94#ifdef USE_AUDIO_DAC
95 void set_audio_dac(audio_dac::AudioDac *audio_dac) { this->audio_dac_ = audio_dac; }
96#endif
97
98 void set_audio_stream_info(const audio::AudioStreamInfo &audio_stream_info) {
99 this->audio_stream_info_ = audio_stream_info;
100 }
101
103
108 template<typename F> void add_audio_output_callback(F &&callback) {
109 this->audio_output_callback_.add(std::forward<F>(callback));
110 }
111
112 protected:
115 float volume_{1.0f};
116 bool mute_state_{false};
117
118#ifdef USE_AUDIO_DAC
120#endif
121
123};
124
125} // namespace esphome::speaker
virtual bool set_mute_off()=0
virtual bool set_volume(float volume)=0
virtual bool set_mute_on()=0
virtual size_t play(const uint8_t *data, size_t length)=0
Plays the provided audio data.
bool is_running() const
Definition speaker.h:65
virtual void set_volume(float volume)
Definition speaker.h:70
size_t play(const std::vector< uint8_t > &data)
Definition speaker.h:50
void set_audio_dac(audio_dac::AudioDac *audio_dac)
Definition speaker.h:95
virtual float get_volume()
Definition speaker.h:78
virtual bool get_pause_state() const
Definition speaker.h:61
audio_dac::AudioDac * audio_dac_
Definition speaker.h:119
virtual void set_pause_state(bool pause_state)
Definition speaker.h:60
CallbackManager< void(uint32_t, int64_t)> audio_output_callback_
Definition speaker.h:122
void set_audio_stream_info(const audio::AudioStreamInfo &audio_stream_info)
Definition speaker.h:98
audio::AudioStreamInfo & get_audio_stream_info()
Definition speaker.h:102
void add_audio_output_callback(F &&callback)
Callback function for sending the duration of the audio written to the speaker since the last callbac...
Definition speaker.h:108
virtual bool get_mute_state()
Definition speaker.h:92
virtual void set_mute_state(bool mute_state)
Definition speaker.h:80
virtual bool has_buffered_data() const =0
audio::AudioStreamInfo audio_stream_info_
Definition speaker.h:114
virtual void start()=0
virtual void finish()
Definition speaker.h:57
bool is_stopped() const
Definition speaker.h:66
virtual void stop()=0
static void uint32_t
uint16_t length
Definition tt21100.cpp:0