ESPHome 2026.4.0
Loading...
Searching...
No Matches
i2s_audio_speaker.h
Go to the documentation of this file.
1#pragma once
2
3#ifdef USE_ESP32
4
5#include "../i2s_audio.h"
6
7#include <freertos/event_groups.h>
8#include <freertos/queue.h>
9#include <freertos/FreeRTOS.h>
10
13
15#include "esphome/core/gpio.h"
18
19namespace esphome {
20namespace i2s_audio {
21
22class I2SAudioSpeaker : public I2SAudioOut, public speaker::Speaker, public Component {
23 public:
24 float get_setup_priority() const override { return esphome::setup_priority::PROCESSOR; }
25
26 void setup() override;
27 void dump_config() override;
28 void loop() override;
29
30 void set_buffer_duration(uint32_t buffer_duration_ms) { this->buffer_duration_ms_ = buffer_duration_ms; }
31 void set_timeout(uint32_t ms) { this->timeout_ = ms; }
32 void set_dout_pin(uint8_t pin) { this->dout_pin_ = (gpio_num_t) pin; }
33 void set_i2s_comm_fmt(std::string mode) { this->i2s_comm_fmt_ = std::move(mode); }
34
35 void start() override;
36 void stop() override;
37 void finish() override;
38
39 void set_pause_state(bool pause_state) override { this->pause_state_ = pause_state; }
40 bool get_pause_state() const override { return this->pause_state_; }
41
48 size_t play(const uint8_t *data, size_t length, TickType_t ticks_to_wait) override;
49 size_t play(const uint8_t *data, size_t length) override { return play(data, length, 0); }
50
51 bool has_buffered_data() const override;
52
57 void set_volume(float volume) override;
58
63 void set_mute_state(bool mute_state) override;
64
65 protected:
72 static void speaker_task(void *params);
73
76 void stop_(bool wait_on_empty);
77
83 static bool i2s_on_sent_cb(i2s_chan_handle_t handle, i2s_event_data_t *event, void *user_ctx);
84
95 esp_err_t start_i2s_driver_(audio::AudioStreamInfo &audio_stream_info);
96
98 void stop_i2s_driver_();
99
100 TaskHandle_t speaker_task_handle_{nullptr};
101 EventGroupHandle_t event_group_{nullptr};
102
103 QueueHandle_t i2s_event_queue_{nullptr};
104
105 std::weak_ptr<RingBuffer> audio_ring_buffer_;
106
108
109 optional<uint32_t> timeout_;
110
111 bool pause_state_{false};
112
113 int16_t q15_volume_factor_{INT16_MAX};
114
115 audio::AudioStreamInfo current_stream_info_; // The currently loaded driver's stream info
116
117 gpio_num_t dout_pin_;
118 std::string i2s_comm_fmt_;
119 i2s_chan_handle_t tx_handle_;
120};
121
122} // namespace i2s_audio
123} // namespace esphome
124
125#endif // USE_ESP32
BedjetMode mode
BedJet operating mode.
esp_err_t start_i2s_driver_(audio::AudioStreamInfo &audio_stream_info)
Starts the ESP32 I2S driver.
static bool i2s_on_sent_cb(i2s_chan_handle_t handle, i2s_event_data_t *event, void *user_ctx)
Callback function used to send playback timestamps the to the speaker task.
float get_setup_priority() const override
void stop_(bool wait_on_empty)
Plays the provided audio data.
void stop_i2s_driver_()
Stops the I2S driver and unlocks the I2S port.
void set_pause_state(bool pause_state) override
std::weak_ptr< RingBuffer > audio_ring_buffer_
void set_i2s_comm_fmt(std::string mode)
void set_buffer_duration(uint32_t buffer_duration_ms)
audio::AudioStreamInfo current_stream_info_
virtual size_t play(const uint8_t *data, size_t length)=0
Plays the provided audio data.
virtual void set_volume(float volume)
Definition speaker.h:71
virtual void set_mute_state(bool mute_state)
Definition speaker.h:81
virtual bool has_buffered_data() const =0
constexpr float PROCESSOR
For components that use data from sensors like displays.
Definition component.h:44
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7
static void uint32_t
uint16_t length
Definition tt21100.cpp:0