8 #if A2DP_LEGACY_I2S_SUPPORT
9 #include "driver/i2s.h"
12 #if A2DP_I2S_AUDIOTOOLS
13 #include "AudioTools.h"
24 virtual bool begin() = 0;
25 virtual size_t write(
const uint8_t *data,
size_t len) = 0;
26 virtual void end() = 0;
27 virtual void set_sample_rate(
int rate) = 0;
28 virtual void set_output_active(
bool active) = 0;
30 #if A2DP_I2S_AUDIOTOOLS
32 virtual void set_output(audio_tools::AudioOutput &output) {}
34 virtual void set_output(audio_tools::AudioStream &output) {}
42 #if A2DP_LEGACY_I2S_SUPPORT
44 virtual void set_pin_config(i2s_pin_config_t pin_config) {}
46 virtual void set_i2s_port(i2s_port_t i2s_num) {}
49 virtual void set_i2s_config(i2s_config_t i2s_config) {}
53 virtual void set_bits_per_sample(
int bps) {}
55 #if ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 1, 1)
57 virtual esp_err_t i2s_mclk_pin_select(
const uint8_t pin) {
return ESP_FAIL; };
72 bool begin()
override;
73 size_t write(
const uint8_t *data,
size_t len)
override;
75 void set_sample_rate(
int rate)
override;
76 void set_output_active(
bool active)
override;
79 #if A2DP_I2S_AUDIOTOOLS || defined(ARDUINO)
80 return p_print !=
nullptr;
87 #if A2DP_I2S_AUDIOTOOLS
91 p_audio_print = &output;
96 static audio_tools::AdapterAudioStreamToAudioOutput adapter(output);
97 adapter.setStream(output);
99 p_audio_print = &adapter;
109 #if defined(ARDUINO) || A2DP_I2S_AUDIOTOOLS
110 Print *p_print =
nullptr;
113 #if A2DP_I2S_AUDIOTOOLS
114 audio_tools::AudioOutput *p_audio_print =
nullptr;
129 bool begin() {
return true;};
130 size_t write(
const uint8_t *data,
size_t len)
override {
131 if (p_print==
nullptr)
return 0;
132 return p_print->write(data, len);
134 void end()
override {}
135 void set_sample_rate(
int rate)
override {};
136 void set_output_active(
bool active)
override {};
139 return p_print !=
nullptr;
146 Print *p_print =
nullptr;
160 bool begin()
override;
161 size_t write(
const uint8_t *data,
size_t len)
override;
163 void set_sample_rate(
int rate)
override;
164 void set_output_active(
bool active)
override;
166 #if A2DP_LEGACY_I2S_SUPPORT
168 virtual void set_pin_config(i2s_pin_config_t pin_config) {
169 this->pin_config = pin_config;
172 virtual void set_i2s_port(i2s_port_t i2s_num) { i2s_port = i2s_num; }
175 virtual void set_i2s_config(i2s_config_t i2s_config) {
176 this->i2s_config = i2s_config;
181 virtual void set_bits_per_sample(
int bps) {
182 i2s_config.bits_per_sample = (i2s_bits_per_sample_t)bps;
185 #if ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 1, 1)
186 virtual esp_err_t i2s_mclk_pin_select(
const uint8_t pin);
190 i2s_config_t i2s_config;
191 i2s_pin_config_t pin_config;
192 i2s_channel_t i2s_channels = I2S_CHANNEL_STEREO;
193 i2s_port_t i2s_port = I2S_NUM_0;
209 rc = out_tools.begin();
211 rc = out_legacy.begin();
215 size_t write(
const uint8_t *data,
size_t len) {
218 result = out_tools.write(data, len);
220 result = out_legacy.write(data, len);
224 void end()
override {
231 void set_sample_rate(
int rate)
override {
233 out_tools.set_sample_rate(rate);
235 out_legacy.set_sample_rate(rate);
238 void set_output_active(
bool active)
override {
240 out_tools.set_output_active(active);
242 out_legacy.set_output_active(active);
245 #if A2DP_I2S_AUDIOTOOLS
257 #if A2DP_LEGACY_I2S_SUPPORT
259 virtual void set_pin_config(i2s_pin_config_t pin_config)
override {
260 out_legacy.set_pin_config(pin_config);
263 virtual void set_i2s_port(i2s_port_t i2s_num)
override {
264 out_legacy.set_i2s_port(i2s_num);
268 virtual void set_i2s_config(i2s_config_t i2s_config)
override {
269 out_legacy.set_i2s_config(i2s_config);
274 virtual void set_bits_per_sample(
int bps)
override {
275 out_legacy.set_bits_per_sample(bps);
278 #if ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 1, 1)
279 virtual esp_err_t i2s_mclk_pin_select(
const uint8_t pin)
override {
280 return out_legacy.i2s_mclk_pin_select(pin);
Default Output Class providing both the Legacy I2S and the AudioTools I2S functionality.
Definition: BluetoothA2DPOutput.h:203
void set_output(audio_tools::AudioOutput &output) override
Output AudioStream using AudioTools library.
Definition: BluetoothA2DPOutput.h:247
void set_output(audio_tools::AudioStream &output) override
Output AudioStream using AudioTools library.
Definition: BluetoothA2DPOutput.h:249
void set_output(Print &output) override
Output to Arduino Print.
Definition: BluetoothA2DPOutput.h:254
Abstract Output Class.
Definition: BluetoothA2DPOutput.h:22
virtual void set_output(audio_tools::AudioOutput &output)
Not implemented.
Definition: BluetoothA2DPOutput.h:32
virtual void set_output(audio_tools::AudioStream &output)
Not implemented.
Definition: BluetoothA2DPOutput.h:34
virtual void set_output(Print &output)
Not implemented.
Definition: BluetoothA2DPOutput.h:39
Legacy I2S Output Class.
Definition: BluetoothA2DPOutput.h:157
Output Class using Print API:
Definition: BluetoothA2DPOutput.h:126
void set_output(Print &output)
Output to Arduino Print.
Definition: BluetoothA2DPOutput.h:143