diff options
| author | cooljqln <cooljqln@noreply.codeberg.org> | 2024-09-17 00:09:10 +0000 |
|---|---|---|
| committer | cooljqln <cooljqln@noreply.codeberg.org> | 2024-09-17 00:09:10 +0000 |
| commit | c030a4510ac6aaed30ad920dfb4e3d8cc384a6a5 (patch) | |
| tree | 12e57cd25efda02a1c6dd58250b3fe8a644434de /src/drivers/bluetooth.cpp | |
| parent | a174d76aa16e09ddfc2ce67393c92ed947a817a5 (diff) | |
| parent | 1106012bde558dab5e192c2129178d44f80b9e4e (diff) | |
| download | tangara-fw-c030a4510ac6aaed30ad920dfb4e3d8cc384a6a5.tar.gz | |
Merge pull request 'Introduce basic TTS support using pre-recorded voice lines' (#103) from jqln/tts into main
Reviewed-on: https://codeberg.org/cool-tech-zone/tangara-fw/pulls/103
Diffstat (limited to 'src/drivers/bluetooth.cpp')
| -rw-r--r-- | src/drivers/bluetooth.cpp | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/src/drivers/bluetooth.cpp b/src/drivers/bluetooth.cpp index 8ec30395..3da5dd0c 100644 --- a/src/drivers/bluetooth.cpp +++ b/src/drivers/bluetooth.cpp @@ -38,7 +38,7 @@ namespace drivers { [[maybe_unused]] static constexpr char kTag[] = "bluetooth"; -DRAM_ATTR static PcmBuffer* sStream = nullptr; +DRAM_ATTR static OutputBuffers* sStreams = nullptr; DRAM_ATTR static std::atomic<float> sVolumeFactor = 1.f; static tasks::WorkerPool* sBgWorker; @@ -97,13 +97,16 @@ IRAM_ATTR auto a2dp_data_cb(uint8_t* buf, int32_t buf_size) -> int32_t { if (buf == nullptr || buf_size <= 0) { return 0; } - PcmBuffer* stream = sStream; - if (stream == nullptr) { + OutputBuffers* streams = sStreams; + if (streams == nullptr) { return 0; } int16_t* samples = reinterpret_cast<int16_t*>(buf); - stream->receive({samples, static_cast<size_t>(buf_size / 2)}, false); + streams->first.receive({samples, static_cast<size_t>(buf_size / 2)}, false, + false); + streams->second.receive({samples, static_cast<size_t>(buf_size / 2)}, true, + false); // Apply software volume scaling. float factor = sVolumeFactor.load(); @@ -141,14 +144,14 @@ auto Bluetooth::enabled() -> bool { return !bluetooth::BluetoothState::is_in_state<bluetooth::Disabled>(); } -auto Bluetooth::source(PcmBuffer* src) -> void { - if (src == sStream) { +auto Bluetooth::sources(OutputBuffers* src) -> void { + auto lock = bluetooth::BluetoothState::lock(); + if (src == sStreams) { return; } - auto lock = bluetooth::BluetoothState::lock(); - sStream = src; + sStreams = src; tinyfsm::FsmList<bluetooth::BluetoothState>::dispatch( - bluetooth::events::SourceChanged{}); + bluetooth::events::SourcesChanged{}); } auto Bluetooth::softVolume(float f) -> void { @@ -771,8 +774,8 @@ void Connected::react(const events::PairedDeviceChanged& ev) { } } -void Connected::react(const events::SourceChanged& ev) { - if (sStream != nullptr) { +void Connected::react(const events::SourcesChanged& ev) { + if (sStreams != nullptr) { ESP_LOGI(kTag, "checking source is ready"); esp_a2d_media_ctrl(ESP_A2D_MEDIA_CTRL_CHECK_SRC_RDY); } else { |
