11 #include <freertos/event_groups.h> 12 #include <freertos/FreeRTOS.h> 15 namespace mixer_speaker {
42 void setup()
override;
45 size_t play(
const uint8_t *data,
size_t length, TickType_t ticks_to_wait)
override;
46 size_t play(
const uint8_t *data,
size_t length)
override {
return this->
play(data, length, 0); }
48 void start()
override;
71 void apply_ducking(uint8_t decibel_reduction, uint32_t duration);
93 static void duck_samples(int16_t *input_buffer, uint32_t input_samples_to_duck, int8_t *current_ducking_db_reduction,
94 uint32_t *ducking_transition_samples_remaining, uint32_t samples_per_ducking_step,
95 int8_t db_change_per_ducking_step);
123 void setup()
override;
124 void loop()
override;
155 static void copy_frames(
const int16_t *input_buffer,
audio::AudioStreamInfo input_stream_info, int16_t *output_buffer,
172 uint32_t frames_to_mix);
174 static void audio_mixer_task(
void *params);
180 esp_err_t start_task_();
184 esp_err_t delete_task_();
186 EventGroupHandle_t event_group_{
nullptr};
193 bool task_stack_in_psram_{
false};
195 bool task_created_{
false};
197 TaskHandle_t task_handle_{
nullptr};
199 StackType_t *task_stack_buffer_{
nullptr};
void set_volume(float volume) override
Volume state changes are passed to the parent's output speaker.
speaker::Speaker * get_output_speaker() const
std::vector< SourceSpeaker * > source_speakers_
static void duck_samples(int16_t *input_buffer, uint32_t input_samples_to_duck, int8_t *current_ducking_db_reduction, uint32_t *ducking_transition_samples_remaining, uint32_t samples_per_ducking_step, int8_t db_change_per_ducking_step)
Ducks audio samples by a specified amount.
std::shared_ptr< audio::AudioSourceTransferBuffer > transfer_buffer_
size_t process_data_from_source(TickType_t ticks_to_wait)
Transfers audio from the ring buffer into the transfer buffer.
std::weak_ptr< audio::AudioSourceTransferBuffer > get_transfer_buffer()
void set_queue_mode(bool queue_mode)
void set_parent(MixerSpeaker *parent)
size_t play(const uint8_t *data, size_t length, TickType_t ticks_to_wait) override
void set_buffer_duration(uint32_t buffer_duration_ms)
void set_pause_state(bool pause_state) override
uint32_t accumulated_frames_read_
void set_output_channels(uint8_t output_channels)
void add_source_speaker(SourceSpeaker *source_speaker)
void set_timeout(uint32_t ms)
void set_mute_state(bool mute_state) override
Mute state changes are passed to the parent's output speaker.
void set_output_speaker(speaker::Speaker *speaker)
optional< uint32_t > timeout_ms_
uint32_t buffer_duration_ms_
uint32_t pending_playback_ms_
void dump_config() override
int8_t target_ducking_db_reduction_
uint32_t samples_per_ducking_step_
size_t play(const uint8_t *data, size_t length) override
bool get_pause_state() const override
int8_t current_ducking_db_reduction_
uint32_t ducking_transition_samples_remaining_
int8_t db_change_per_ducking_step_
Implementation of SPI Controller mode.
uint32_t last_seen_data_ms_
std::weak_ptr< RingBuffer > ring_buffer_
void set_task_stack_in_psram(bool task_stack_in_psram)
void apply_ducking(uint8_t decibel_reduction, uint32_t duration)
Sets the ducking level for the source speaker.
bool has_buffered_data() const override
optional< audio::AudioStreamInfo > audio_stream_info_