ESPHome  2025.2.0
resampler_speaker.h
Go to the documentation of this file.
1 #pragma once
2 
3 #ifdef USE_ESP32
4 
8 
10 
11 #include <freertos/event_groups.h>
12 #include <freertos/FreeRTOS.h>
13 
14 namespace esphome {
15 namespace resampler {
16 
18  public:
19  float get_setup_priority() const override { return esphome::setup_priority::DATA; }
20  void setup() override;
21  void loop() override;
22 
23  size_t play(const uint8_t *data, size_t length, TickType_t ticks_to_wait) override;
24  size_t play(const uint8_t *data, size_t length) override { return this->play(data, length, 0); }
25 
26  void start() override;
27  void stop() override;
28  void finish() override;
29 
30  void set_pause_state(bool pause_state) override { this->output_speaker_->set_pause_state(pause_state); }
31  bool get_pause_state() const override { return this->output_speaker_->get_pause_state(); }
32 
33  bool has_buffered_data() const override;
34 
36  void set_mute_state(bool mute_state) override;
37 
39  void set_volume(float volume) override;
40 
41  void set_output_speaker(speaker::Speaker *speaker) { this->output_speaker_ = speaker; }
42  void set_task_stack_in_psram(bool task_stack_in_psram) { this->task_stack_in_psram_ = task_stack_in_psram; }
43 
44  void set_target_bits_per_sample(uint8_t target_bits_per_sample) {
45  this->target_bits_per_sample_ = target_bits_per_sample;
46  }
47  void set_target_sample_rate(uint32_t target_sample_rate) { this->target_sample_rate_ = target_sample_rate; }
48 
49  void set_filters(uint16_t filters) { this->filters_ = filters; }
50  void set_taps(uint16_t taps) { this->taps_ = taps; }
51 
52  void set_buffer_duration(uint32_t buffer_duration_ms) { this->buffer_duration_ms_ = buffer_duration_ms; }
53 
54  protected:
59  esp_err_t start_();
60 
65  esp_err_t start_task_();
66 
68  void stop_();
69 
73  esp_err_t delete_task_();
74 
75  inline bool requires_resampling_() const;
76  static void resample_task(void *params);
77 
78  EventGroupHandle_t event_group_{nullptr};
79 
80  std::weak_ptr<RingBuffer> ring_buffer_;
81 
83 
84  bool task_stack_in_psram_{false};
85  bool task_created_{false};
86 
87  TaskHandle_t task_handle_{nullptr};
88  StaticTask_t task_stack_;
89  StackType_t *task_stack_buffer_{nullptr};
90 
92 
93  uint16_t taps_;
94  uint16_t filters_;
95 
98 
100 
102 };
103 
104 } // namespace resampler
105 } // namespace esphome
106 
107 #endif
void set_target_bits_per_sample(uint8_t target_bits_per_sample)
const float DATA
For components that import data from directly connected sensors like DHT.
Definition: component.cpp:19
void set_task_stack_in_psram(bool task_stack_in_psram)
void set_output_speaker(speaker::Speaker *speaker)
void set_volume(float volume) override
Volume state changes are passed to the parent&#39;s output speaker.
void set_buffer_duration(uint32_t buffer_duration_ms)
esp_err_t start_()
Starts the output speaker after setting the resampled stream info.
void stop_()
Stops the output speaker. If the resampling task is running, it sends the stop command.
virtual bool get_pause_state() const
Definition: speaker.h:62
void set_pause_state(bool pause_state) override
static void resample_task(void *params)
esp_err_t delete_task_()
Deallocates the task stack and resets the pointers.
void set_mute_state(bool mute_state) override
Mute state changes are passed to the parent&#39;s output speaker.
size_t play(const uint8_t *data, size_t length) override
uint16_t length
Definition: tt21100.cpp:12
void set_target_sample_rate(uint32_t target_sample_rate)
Implementation of SPI Controller mode.
Definition: a01nyub.cpp:7
virtual void set_pause_state(bool pause_state)
Definition: speaker.h:61
audio::AudioStreamInfo target_stream_info_
esp_err_t start_task_()
Starts the resampler task after allocating the task stack.
std::weak_ptr< RingBuffer > ring_buffer_
float get_setup_priority() const override
size_t play(const uint8_t *data, size_t length, TickType_t ticks_to_wait) override