3 #include "BluetoothA2DPSink.h"
5 #define RINGBUF_HIGHEST_WATER_LEVEL (32 * 1024)
6 #define RINGBUF_PREFETCH_PERCENT 65
8 enum A2DPRingBufferMode :
char {
9 RINGBUFFER_MODE_PROCESSING,
11 RINGBUFFER_MODE_PREFETCHING,
13 RINGBUFFER_MODE_DROPPING
28 #if A2DP_I2S_AUDIOTOOLS
31 actual_bluetooth_a2dp_sink =
this;
36 actual_bluetooth_a2dp_sink =
this;
44 actual_bluetooth_a2dp_sink =
this;
57 if (percent < 0)
return;
58 if (percent > 100)
return;
59 ringbuffer_prefetch_percent = percent;
65 void set_i2s_write_size_upto(
size_t size) { i2s_write_size_upto = size; }
67 void set_i2s_ticks(
int ticks) { i2s_ticks = ticks; }
70 TaskHandle_t s_bt_i2s_task_handle =
nullptr;
71 RingbufHandle_t s_ringbuf_i2s =
nullptr;
72 SemaphoreHandle_t s_i2s_write_semaphore =
nullptr;
74 int i2s_stack_size = 2048;
75 int i2s_ringbuffer_size = RINGBUF_HIGHEST_WATER_LEVEL;
76 UBaseType_t i2s_task_priority = configMAX_PRIORITIES - 3;
77 volatile A2DPRingBufferMode ringbuffer_mode = RINGBUFFER_MODE_PROCESSING;
78 volatile bool is_starting =
true;
79 size_t i2s_write_size_upto = 240 * 6;
81 int ringbuffer_prefetch_percent = RINGBUF_PREFETCH_PERCENT;
83 void bt_i2s_task_start_up(
void)
override;
84 void bt_i2s_task_shut_down(
void)
override;
86 size_t write_audio(
const uint8_t *data,
size_t size)
override;
88 void set_i2s_active(
bool active)
override {
89 BluetoothA2DPSink::set_i2s_active(active);
91 ringbuffer_mode = RINGBUFFER_MODE_PREFETCHING;
96 int i2s_ringbuffer_prefetch_size() {
97 int bytes = i2s_ringbuffer_size * ringbuffer_prefetch_percent / 100;
98 return (bytes / 4 * 4);
virtual void set_output(audio_tools::AudioOutput &output)
Not implemented.
Definition: BluetoothA2DPOutput.h:32
A2DP Bluethooth Sink - We initialize and start the Bluetooth A2DP Sink. The example https://github....
Definition: BluetoothA2DPSink.h:59
The BluetoothA2DPSinkQueued is using a separate Task with an additinal Queue to write the I2S data....
Definition: BluetoothA2DPSinkQueued.h:24
size_t write_audio(const uint8_t *data, size_t size) override
output audio data e.g. to i2s or to queue
Definition: BluetoothA2DPSinkQueued.cpp:87
BluetoothA2DPSinkQueued(audio_tools::AudioOutput &output)
Output AudioOutput using AudioTools library.
Definition: BluetoothA2DPSinkQueued.h:30
BluetoothA2DPSinkQueued(audio_tools::AudioStream &output)
Output AudioStream using AudioTools library.
Definition: BluetoothA2DPSinkQueued.h:35
void set_i2s_task_priority(UBaseType_t prio)
Defines the priority of the I2S task.
Definition: BluetoothA2DPSinkQueued.h:63
BluetoothA2DPSinkQueued(Print &output)
Output to Arduino Print.
Definition: BluetoothA2DPSinkQueued.h:43
void set_i2s_ringbuffer_prefetch_percent(int percent)
Audio starts to play when limit exeeded.
Definition: BluetoothA2DPSinkQueued.h:56
void set_i2s_stack_size(int size)
Defines the stack size of the i2s task (in bytes)
Definition: BluetoothA2DPSinkQueued.h:50
void i2s_task_handler(void *arg) override
dummy functions needed for BluetoothA2DPSinkQueued
Definition: BluetoothA2DPSinkQueued.cpp:43
void set_i2s_ringbuffer_size(int size)
Defines the ringbuffer size used by the i2s task (in bytes)
Definition: BluetoothA2DPSinkQueued.h:53