ESPHome
2024.11.1
|
#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_ () |
Starts the ESP32 I2S driver. More... | |
esp_err_t | reconfigure_i2s_stream_info_ (audio::AudioStreamInfo &audio_stream_info) |
Adjusts the I2S driver configuration to match the incoming audio stream. 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 391 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 504 of file i2s_audio_speaker.cpp.
|
overridevirtual |
Reimplemented from esphome::speaker::Speaker.
Definition at line 354 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 214 of file i2s_audio_speaker.cpp.
|
overridevirtual |
Reimplemented from esphome::Component.
Definition at line 104 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 192 of file i2s_audio_speaker.cpp.
|
inlineoverridevirtual |
Implements esphome::speaker::Speaker.
Definition at line 50 of file i2s_audio_speaker.h.
|
protected |
Adjusts the I2S driver configuration to match the incoming audio stream.
Modifies I2S driver's sample rate, bits per sample, and number of channel settings. If the I2S is in secondary mode, it only modifies the number of channels.
audio_stream_info | Describes the incoming audio stream |
Definition at line 480 of file i2s_audio_speaker.cpp.
|
protected |
Sets the corresponding ERR_ESP event group bits.
err | esp_err_t error code. |
Definition at line 369 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 170 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 153 of file i2s_audio_speaker.cpp.
|
overridevirtual |
Reimplemented from esphome::Component.
Definition at line 92 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 221 of file i2s_audio_speaker.cpp.
|
overridevirtual |
Implements esphome::speaker::Speaker.
Definition at line 333 of file i2s_audio_speaker.cpp.
|
protected |
Starts the ESP32 I2S driver.
Attempts to lock the I2S port, starts the I2S driver, and sets the data out pin. If it fails, it will unlock the I2S port and uninstall the driver, if necessary.
Definition at line 414 of file i2s_audio_speaker.cpp.
|
overridevirtual |
Implements esphome::speaker::Speaker.
Definition at line 352 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 356 of file i2s_audio_speaker.cpp.
|
protected |
Definition at line 125 of file i2s_audio_speaker.h.
|
protected |
Definition at line 127 of file i2s_audio_speaker.h.
|
protected |
Definition at line 124 of file i2s_audio_speaker.h.
|
protected |
Definition at line 130 of file i2s_audio_speaker.h.
|
protected |
Definition at line 120 of file i2s_audio_speaker.h.
|
protected |
Definition at line 139 of file i2s_audio_speaker.h.
|
protected |
Definition at line 122 of file i2s_audio_speaker.h.
|
protected |
Definition at line 137 of file i2s_audio_speaker.h.
|
protected |
Definition at line 134 of file i2s_audio_speaker.h.
|
protected |
Definition at line 119 of file i2s_audio_speaker.h.
|
protected |
Definition at line 132 of file i2s_audio_speaker.h.
|
protected |
Definition at line 129 of file i2s_audio_speaker.h.