ESPHome 2025.5.0
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 {
20namespace speaker {
21
28
29class Speaker {
30 public:
31#ifdef USE_ESP32
38 virtual size_t play(const uint8_t *data, size_t length, TickType_t ticks_to_wait) {
39 return this->play(data, length);
40 };
41#endif
42
49 virtual size_t play(const uint8_t *data, size_t length) = 0;
50
51 size_t play(const std::vector<uint8_t> &data) { return this->play(data.data(), data.size()); }
52
53 virtual void start() = 0;
54 virtual void stop() = 0;
55 // In compare between *STOP()* and *FINISH()*; *FINISH()* will stop after emptying the play buffer,
56 // while *STOP()* will break directly.
57 // When finish() is not implemented on the platform component it should just do a normal stop.
58 virtual void finish() { this->stop(); }
59
60 // Pauses processing incoming audio. Needs to be implemented specifically per speaker component
61 virtual void set_pause_state(bool pause_state) {}
62 virtual bool get_pause_state() const { return false; }
63
64 virtual bool has_buffered_data() const = 0;
65
66 bool is_running() const { return this->state_ == STATE_RUNNING; }
67 bool is_stopped() const { return this->state_ == STATE_STOPPED; }
68
69 // Volume control is handled by a configured audio dac component. Individual speaker components can
70 // override and implement in software if an audio dac isn't available.
71 virtual void set_volume(float volume) {
72 this->volume_ = volume;
73#ifdef USE_AUDIO_DAC
74 if (this->audio_dac_ != nullptr) {
75 this->audio_dac_->set_volume(volume);
76 }
77#endif
78 };
79 virtual float get_volume() { return this->volume_; }
80
81 virtual void set_mute_state(bool mute_state) {
82 this->mute_state_ = mute_state;
83#ifdef USE_AUDIO_DAC
84 if (this->audio_dac_) {
85 if (mute_state) {
86 this->audio_dac_->set_mute_on();
87 } else {
88 this->audio_dac_->set_mute_off();
89 }
90 }
91#endif
92 }
93 virtual bool get_mute_state() { return this->mute_state_; }
94
95#ifdef USE_AUDIO_DAC
96 void set_audio_dac(audio_dac::AudioDac *audio_dac) { this->audio_dac_ = audio_dac; }
97#endif
98
99 void set_audio_stream_info(const audio::AudioStreamInfo &audio_stream_info) {
100 this->audio_stream_info_ = audio_stream_info;
101 }
102
104
109 void add_audio_output_callback(std::function<void(uint32_t, int64_t)> &&callback) {
110 this->audio_output_callback_.add(std::move(callback));
111 }
112
113 protected:
116 float volume_{1.0f};
117 bool mute_state_{false};
118
119#ifdef USE_AUDIO_DAC
121#endif
122
123 CallbackManager<void(uint32_t, int64_t)> audio_output_callback_{};
124};
125
126} // namespace speaker
127} // namespace esphome
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:66
virtual void set_volume(float volume)
Definition speaker.h:71
size_t play(const std::vector< uint8_t > &data)
Definition speaker.h:51
void add_audio_output_callback(std::function< void(uint32_t, int64_t)> &&callback)
Callback function for sending the duration of the audio written to the speaker since the last callbac...
Definition speaker.h:109
void set_audio_dac(audio_dac::AudioDac *audio_dac)
Definition speaker.h:96
virtual float get_volume()
Definition speaker.h:79
virtual bool get_pause_state() const
Definition speaker.h:62
audio_dac::AudioDac * audio_dac_
Definition speaker.h:120
virtual void set_pause_state(bool pause_state)
Definition speaker.h:61
CallbackManager< void(uint32_t, int64_t)> audio_output_callback_
Definition speaker.h:123
void set_audio_stream_info(const audio::AudioStreamInfo &audio_stream_info)
Definition speaker.h:99
audio::AudioStreamInfo & get_audio_stream_info()
Definition speaker.h:103
virtual bool get_mute_state()
Definition speaker.h:93
virtual void set_mute_state(bool mute_state)
Definition speaker.h:81
virtual bool has_buffered_data() const =0
audio::AudioStreamInfo audio_stream_info_
Definition speaker.h:115
virtual void start()=0
virtual void finish()
Definition speaker.h:58
bool is_stopped() const
Definition speaker.h:67
virtual void stop()=0
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7
uint16_t length
Definition tt21100.cpp:0