ESPHome  2025.3.3
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  bool get_mute_state() override { return this->output_speaker_->get_mute_state(); }
38 
40  void set_volume(float volume) override;
41  float get_volume() override { return this->output_speaker_->get_volume(); }
42 
43  void set_output_speaker(speaker::Speaker *speaker) { this->output_speaker_ = speaker; }
44  void set_task_stack_in_psram(bool task_stack_in_psram) { this->task_stack_in_psram_ = task_stack_in_psram; }
45 
46  void set_target_bits_per_sample(uint8_t target_bits_per_sample) {
47  this->target_bits_per_sample_ = target_bits_per_sample;
48  }
49  void set_target_sample_rate(uint32_t target_sample_rate) { this->target_sample_rate_ = target_sample_rate; }
50 
51  void set_filters(uint16_t filters) { this->filters_ = filters; }
52  void set_taps(uint16_t taps) { this->taps_ = taps; }
53 
54  void set_buffer_duration(uint32_t buffer_duration_ms) { this->buffer_duration_ms_ = buffer_duration_ms; }
55 
56  protected:
61  esp_err_t start_();
62 
67  esp_err_t start_task_();
68 
70  void stop_();
71 
75  esp_err_t delete_task_();
76 
77  inline bool requires_resampling_() const;
78  static void resample_task(void *params);
79 
80  EventGroupHandle_t event_group_{nullptr};
81 
82  std::weak_ptr<RingBuffer> ring_buffer_;
83 
85 
86  bool task_stack_in_psram_{false};
87  bool task_created_{false};
88 
89  TaskHandle_t task_handle_{nullptr};
90  StaticTask_t task_stack_;
91  StackType_t *task_stack_buffer_{nullptr};
92 
94 
95  uint16_t taps_;
96  uint16_t filters_;
97 
100 
102 
104 };
105 
106 } // namespace resampler
107 } // namespace esphome
108 
109 #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.
virtual bool get_mute_state()
Definition: speaker.h:93
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.
virtual float get_volume()
Definition: speaker.h:79
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