ESPHome 2026.5.0b1
Loading...
Searching...
No Matches
audio_reader.h
Go to the documentation of this file.
1#pragma once
2
3#ifdef USE_ESP32
4
5#include "audio.h"
7
9
10#include "esp_err.h"
11
12#include <esp_http_client.h>
13
14namespace esphome::audio {
15
16enum class AudioReaderState : uint8_t {
17 READING = 0, // More data is available to read
18 FINISHED, // All data has been read and transferred
19 FAILED, // Encountered an error
20};
21
23 /*
24 * @brief Class that facilitates reading a raw audio file.
25 * Files can be read from flash (stored in a AudioFile struct) or from an http source.
26 * The file data is sent to a ring buffer sink.
27 */
28 public:
32 AudioReader(size_t buffer_size) : buffer_size_(buffer_size) {}
34
38 esp_err_t add_sink(const std::weak_ptr<ring_buffer::RingBuffer> &output_ring_buffer);
39
44 esp_err_t start(const std::string &uri, AudioFileType &file_type);
45
50 esp_err_t start(AudioFile *audio_file, AudioFileType &file_type);
51
55
56 protected:
58 static esp_err_t http_event_handler(esp_http_client_event_t *evt);
59
62
63 std::shared_ptr<ring_buffer::RingBuffer> file_ring_buffer_;
64 std::unique_ptr<AudioSinkTransferBuffer> output_transfer_buffer_;
66
69
70 esp_http_client_handle_t client_{nullptr};
71
74 const uint8_t *file_current_{nullptr};
75};
76} // namespace esphome::audio
77
78#endif
AudioReaderState http_read_()
AudioReaderState file_read_()
std::unique_ptr< AudioSinkTransferBuffer > output_transfer_buffer_
const uint8_t * file_current_
esp_err_t add_sink(const std::weak_ptr< ring_buffer::RingBuffer > &output_ring_buffer)
Adds a sink ring buffer for audio data.
AudioReader(size_t buffer_size)
Constructs an AudioReader object.
AudioReaderState read()
Reads new file data from the source and sends to the ring buffer sink.
static esp_err_t http_event_handler(esp_http_client_event_t *evt)
Monitors the http client events to attempt determining the file type from the Content-Type header.
std::shared_ptr< ring_buffer::RingBuffer > file_ring_buffer_
esp_http_client_handle_t client_
esp_err_t start(const std::string &uri, AudioFileType &file_type)
Starts reading an audio file from an http source.
static void uint32_t