ESPHome
2024.12.2
|
#include <i2s_audio_speaker.h>
Public Member Functions | |
float | get_setup_priority () const override |
void | setup () override |
void | loop () override |
void | set_buffer_duration (uint32_t buffer_duration_ms) |
void | set_timeout (uint32_t ms) |
void | set_dout_pin (uint8_t pin) |
void | set_internal_dac_mode (i2s_dac_mode_t mode) |
void | set_i2s_comm_fmt (i2s_comm_format_t mode) |
void | start () override |
void | stop () override |
void | finish () override |
size_t | play (const uint8_t *data, size_t length, TickType_t ticks_to_wait) override |
Plays the provided audio data. More... | |
size_t | play (const uint8_t *data, size_t length) override |
bool | has_buffered_data () const override |
void | set_volume (float volume) override |
Sets the volume of the speaker. More... | |
void | set_mute_state (bool mute_state) override |
Mutes or unmute the speaker. More... | |
Public Member Functions inherited from esphome::i2s_audio::I2SAudioBase | |
void | set_i2s_mode (i2s_mode_t mode) |
void | set_channel (i2s_channel_fmt_t channel) |
void | set_sample_rate (uint32_t sample_rate) |
void | set_bits_per_sample (i2s_bits_per_sample_t bits_per_sample) |
void | set_bits_per_channel (i2s_bits_per_chan_t bits_per_channel) |
void | set_use_apll (uint32_t use_apll) |
Public Member Functions inherited from esphome::Parented< I2SAudioComponent > | |
Parented () | |
Parented (I2SAudioComponent *parent) | |
I2SAudioComponent * | get_parent () const |
Get the parent of this object. More... | |
void | set_parent (I2SAudioComponent *parent) |
Set the parent of this object. More... | |
Public Member Functions inherited from esphome::speaker::Speaker | |
size_t | play (const std::vector< uint8_t > &data) |
bool | is_running () const |
bool | is_stopped () const |
float | get_volume () |
bool | get_mute_state () |
void | set_audio_dac (audio_dac::AudioDac *audio_dac) |
void | set_audio_stream_info (const audio::AudioStreamInfo &audio_stream_info) |
Public Member Functions inherited from esphome::Component | |
virtual void | dump_config () |
float | get_actual_setup_priority () const |
void | set_setup_priority (float priority) |
virtual float | get_loop_priority () const |
priority of loop(). More... | |
void | call () |
virtual void | on_shutdown () |
virtual void | on_safe_shutdown () |
uint32_t | get_component_state () const |
virtual void | mark_failed () |
Mark this component as failed. More... | |
bool | is_failed () const |
bool | is_ready () const |
virtual bool | can_proceed () |
bool | status_has_warning () const |
bool | status_has_error () const |
void | status_set_warning (const char *message="unspecified") |
void | status_set_error (const char *message="unspecified") |
void | status_clear_warning () |
void | status_clear_error () |
void | status_momentary_warning (const std::string &name, uint32_t length=5000) |
void | status_momentary_error (const std::string &name, uint32_t length=5000) |
bool | has_overridden_loop () const |
void | set_component_source (const char *source) |
Set where this component was loaded from for some debug messages. More... | |
const char * | get_component_source () const |
Get the integration where this component was declared as a string. More... | |
Protected Member Functions | |
void | stop_ (bool wait_on_empty) |
Sends a stop command to the speaker task via event_group_. More... | |
bool | send_esp_err_to_event_group_ (esp_err_t err) |
Sets the corresponding ERR_ESP event group bits. More... | |
esp_err_t | allocate_buffers_ (size_t data_buffer_size, size_t ring_buffer_size) |
Allocates the data buffer and ring buffer. More... | |
esp_err_t | start_i2s_driver_ (audio::AudioStreamInfo &audio_stream_info) |
Starts the ESP32 I2S driver. More... | |
void | delete_task_ (size_t buffer_size) |
Deletes the speaker's task. More... | |
Protected Member Functions inherited from esphome::Component | |
virtual void | call_loop () |
virtual void | call_setup () |
virtual void | call_dump_config () |
void | set_interval (const std::string &name, uint32_t interval, std::function< void()> &&f) |
Set an interval function with a unique name. More... | |
void | set_interval (uint32_t interval, std::function< void()> &&f) |
bool | cancel_interval (const std::string &name) |
Cancel an interval function. More... | |
void | set_retry (const std::string &name, uint32_t initial_wait_time, uint8_t max_attempts, std::function< RetryResult(uint8_t)> &&f, float backoff_increase_factor=1.0f) |
Set an retry function with a unique name. More... | |
void | set_retry (uint32_t initial_wait_time, uint8_t max_attempts, std::function< RetryResult(uint8_t)> &&f, float backoff_increase_factor=1.0f) |
bool | cancel_retry (const std::string &name) |
Cancel a retry function. More... | |
void | set_timeout (const std::string &name, uint32_t timeout, std::function< void()> &&f) |
Set a timeout function with a unique name. More... | |
void | set_timeout (uint32_t timeout, std::function< void()> &&f) |
bool | cancel_timeout (const std::string &name) |
Cancel a timeout function. More... | |
void | defer (const std::string &name, std::function< void()> &&f) |
Defer a callback to the next loop() call. More... | |
void | defer (std::function< void()> &&f) |
Defer a callback to the next loop() call. More... | |
bool | cancel_defer (const std::string &name) |
Cancel a defer callback using the specified name, name must not be empty. More... | |
Static Protected Member Functions | |
static void | speaker_task (void *params) |
Function for the FreeRTOS task handling audio output. More... | |
Protected Attributes | |
TaskHandle_t | speaker_task_handle_ {nullptr} |
EventGroupHandle_t | event_group_ {nullptr} |
QueueHandle_t | i2s_event_queue_ |
uint8_t * | data_buffer_ |
std::shared_ptr< RingBuffer > | audio_ring_buffer_ |
uint32_t | buffer_duration_ms_ |
optional< uint32_t > | timeout_ |
uint8_t | dout_pin_ |
bool | task_created_ {false} |
int16_t | q15_volume_factor_ {INT16_MAX} |
i2s_dac_mode_t | internal_dac_mode_ {I2S_DAC_CHANNEL_DISABLE} |
i2s_comm_format_t | i2s_comm_fmt_ |
Protected Attributes inherited from esphome::i2s_audio::I2SAudioBase | |
i2s_mode_t | i2s_mode_ {} |
i2s_channel_fmt_t | channel_ |
uint32_t | sample_rate_ |
i2s_bits_per_sample_t | bits_per_sample_ |
i2s_bits_per_chan_t | bits_per_channel_ |
bool | use_apll_ |
Protected Attributes inherited from esphome::Parented< I2SAudioComponent > | |
I2SAudioComponent * | parent_ |
Protected Attributes inherited from esphome::speaker::Speaker | |
State | state_ {STATE_STOPPED} |
audio::AudioStreamInfo | audio_stream_info_ |
float | volume_ {1.0f} |
bool | mute_state_ {false} |
audio_dac::AudioDac * | audio_dac_ {nullptr} |
Protected Attributes inherited from esphome::Component | |
uint32_t | component_state_ {0x0000} |
State of this component. More... | |
float | setup_priority_override_ {NAN} |
const char * | component_source_ {nullptr} |
Definition at line 24 of file i2s_audio_speaker.h.
|
protected |
Allocates the data buffer and ring buffer.
data_buffer_size | Number of bytes to allocate for the data buffer. |
ring_buffer_size | Number of bytes to allocate for the ring buffer. |
Definition at line 395 of file i2s_audio_speaker.cpp.
|
protected |
Deletes the speaker's task.
Deallocates the data_buffer_ and audio_ring_buffer_, if necessary, and deletes the task. Should only be called by the speaker_task itself.
buffer_size | The allocated size of the data_buffer_. |
Definition at line 506 of file i2s_audio_speaker.cpp.
|
overridevirtual |
Reimplemented from esphome::speaker::Speaker.
Definition at line 355 of file i2s_audio_speaker.cpp.
|
inlineoverridevirtual |
Reimplemented from esphome::Component.
Definition at line 26 of file i2s_audio_speaker.h.
|
overridevirtual |
Implements esphome::speaker::Speaker.
Definition at line 217 of file i2s_audio_speaker.cpp.
|
overridevirtual |
Reimplemented from esphome::Component.
Definition at line 107 of file i2s_audio_speaker.cpp.
|
overridevirtual |
Plays the provided audio data.
Starts the speaker task, if necessary. Writes the audio data to the ring buffer.
data | Audio data in the format set by the parent speaker classes set_audio_stream_info method. |
length | The length of the audio data in bytes. |
ticks_to_wait | The FreeRTOS ticks to wait before writing as much data as possible to the ring buffer. |
Reimplemented from esphome::speaker::Speaker.
Definition at line 195 of file i2s_audio_speaker.cpp.
|
inlineoverridevirtual |
Implements esphome::speaker::Speaker.
Definition at line 50 of file i2s_audio_speaker.h.
|
protected |
Sets the corresponding ERR_ESP event group bits.
err | esp_err_t error code. |
Definition at line 370 of file i2s_audio_speaker.cpp.
|
inline |
Definition at line 31 of file i2s_audio_speaker.h.
|
inline |
Definition at line 33 of file i2s_audio_speaker.h.
|
inline |
Definition at line 37 of file i2s_audio_speaker.h.
|
inline |
Definition at line 35 of file i2s_audio_speaker.h.
|
overridevirtual |
Mutes or unmute the speaker.
Uses the speaker's configured audio dac component. If unavailble, it is implemented as a software volume control. Overrides the default setter to convert the floating point volume to a Q15 fixed-point factor.
mute_state | true for muting, false for unmuting |
Reimplemented from esphome::speaker::Speaker.
Definition at line 173 of file i2s_audio_speaker.cpp.
|
inline |
Definition at line 32 of file i2s_audio_speaker.h.
|
overridevirtual |
Sets the volume of the speaker.
Uses the speaker's configured audio dac component. If unavailble, it is implemented as a software volume control. Overrides the default setter to convert the floating point volume to a Q15 fixed-point factor.
volume | between 0.0 and 1.0 |
Reimplemented from esphome::speaker::Speaker.
Definition at line 156 of file i2s_audio_speaker.cpp.
|
overridevirtual |
Reimplemented from esphome::Component.
Definition at line 95 of file i2s_audio_speaker.cpp.
|
staticprotected |
Function for the FreeRTOS task handling audio output.
After receiving the COMMAND_START signal, allocates space for the buffers, starts the I2S driver, and reads audio from the ring buffer and writes audio to the I2S port. Stops immmiately after receiving the COMMAND_STOP signal and stops only after the ring buffer is empty after receiving the COMMAND_STOP_GRACEFULLY signal. Stops if the ring buffer hasn't read data for more than timeout_ milliseconds. When stopping, it deallocates the buffers, stops the I2S driver, unlocks the I2S port, and deletes the task. It communicates the state and any errors via event_group_.
params | I2SAudioSpeaker component |
Definition at line 224 of file i2s_audio_speaker.cpp.
|
overridevirtual |
Implements esphome::speaker::Speaker.
Definition at line 334 of file i2s_audio_speaker.cpp.
|
protected |
Starts the ESP32 I2S driver.
Attempts to lock the I2S port, starts the I2S driver using the passed in stream information, and sets the data out pin. If it fails, it will unlock the I2S port and uninstall the driver, if necessary.
audio_stream_info | Stream information for the I2S driver. |
Definition at line 418 of file i2s_audio_speaker.cpp.
|
overridevirtual |
Implements esphome::speaker::Speaker.
Definition at line 353 of file i2s_audio_speaker.cpp.
|
protected |
Sends a stop command to the speaker task via event_group_.
wait_on_empty | If false, sends the COMMAND_STOP signal. If true, sends the COMMAND_STOP_GRACEFULLY signal. |
Definition at line 357 of file i2s_audio_speaker.cpp.
|
protected |
Definition at line 116 of file i2s_audio_speaker.h.
|
protected |
Definition at line 118 of file i2s_audio_speaker.h.
|
protected |
Definition at line 115 of file i2s_audio_speaker.h.
|
protected |
Definition at line 121 of file i2s_audio_speaker.h.
|
protected |
Definition at line 111 of file i2s_audio_speaker.h.
|
protected |
Definition at line 130 of file i2s_audio_speaker.h.
|
protected |
Definition at line 113 of file i2s_audio_speaker.h.
|
protected |
Definition at line 128 of file i2s_audio_speaker.h.
|
protected |
Definition at line 125 of file i2s_audio_speaker.h.
|
protected |
Definition at line 110 of file i2s_audio_speaker.h.
|
protected |
Definition at line 123 of file i2s_audio_speaker.h.
|
protected |
Definition at line 120 of file i2s_audio_speaker.h.