ESPHome 2025.5.0
Loading...
Searching...
No Matches
audio_resampler.h
Go to the documentation of this file.
1#pragma once
2
3#ifdef USE_ESP32
4
5#include "audio.h"
7
11
12#ifdef USE_SPEAKER
14#endif
15
16#include "esp_err.h"
17
18#include <resampler.h> // esp-audio-libs
19
20namespace esphome {
21namespace audio {
22
23enum class AudioResamplerState : uint8_t {
24 RESAMPLING, // More data is available to resample
25 FINISHED, // All file data has been resampled and transferred
26 FAILED, // Unused state included for consistency among Audio classes
27};
28
30 /*
31 * @brief Class that facilitates resampling audio.
32 * The audio data is read from a ring buffer source, resampled, and sent to an audio sink (ring buffer or speaker
33 * component). Also supports converting bits per sample.
34 */
35 public:
39 AudioResampler(size_t input_buffer_size, size_t output_buffer_size);
40
44 esp_err_t add_source(std::weak_ptr<RingBuffer> &input_ring_buffer);
45
49 esp_err_t add_sink(std::weak_ptr<RingBuffer> &output_ring_buffer);
50
51#ifdef USE_SPEAKER
55 esp_err_t add_sink(speaker::Speaker *speaker);
56#endif
57
66 esp_err_t start(AudioStreamInfo &input_stream_info, AudioStreamInfo &output_stream_info, uint16_t number_of_taps,
67 uint16_t number_of_filters);
68
75 AudioResamplerState resample(bool stop_gracefully, int32_t *ms_differential);
76
79 void set_pause_output_state(bool pause_state) { this->pause_output_ = pause_state; }
80
81 protected:
82 std::unique_ptr<AudioSourceTransferBuffer> input_transfer_buffer_;
83 std::unique_ptr<AudioSinkTransferBuffer> output_transfer_buffer_;
84
87
90
91 bool pause_output_{false};
92
95
96 std::unique_ptr<esp_audio_libs::resampler::Resampler> resampler_;
97};
98
99} // namespace audio
100} // namespace esphome
101
102#endif
esp_err_t add_sink(std::weak_ptr< RingBuffer > &output_ring_buffer)
Adds a sink ring buffer for resampled audio.
AudioResamplerState resample(bool stop_gracefully, int32_t *ms_differential)
Resamples audio from the ring buffer source and writes to the sink.
esp_err_t add_source(std::weak_ptr< RingBuffer > &input_ring_buffer)
Adds a source ring buffer for audio data.
std::unique_ptr< esp_audio_libs::resampler::Resampler > resampler_
std::unique_ptr< AudioSinkTransferBuffer > output_transfer_buffer_
void set_pause_output_state(bool pause_state)
Pauses sending resampled audio to the sink.
AudioResampler(size_t input_buffer_size, size_t output_buffer_size)
Allocates the input and output transfer buffers.
std::unique_ptr< AudioSourceTransferBuffer > input_transfer_buffer_
esp_err_t start(AudioStreamInfo &input_stream_info, AudioStreamInfo &output_stream_info, uint16_t number_of_taps, uint16_t number_of_filters)
Sets up the class to resample.
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7