diff options
| author | jacqueline <me@jacqueline.id.au> | 2024-09-12 10:44:26 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2024-09-12 10:44:26 +1000 |
| commit | c51709f99ff5456a5863ca39ff893f823a3642d4 (patch) | |
| tree | 4b2262b6451834dfb0e197fcc7c64fd3ea0f0569 /src/drivers/pcm_buffer.cpp | |
| parent | 542ebc65317ac4744a4b96c3131dace5bda10314 (diff) | |
| download | tangara-fw-c51709f99ff5456a5863ca39ff893f823a3642d4.tar.gz | |
Pause and unpause the current audio output in response to TTS
Diffstat (limited to 'src/drivers/pcm_buffer.cpp')
| -rw-r--r-- | src/drivers/pcm_buffer.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/drivers/pcm_buffer.cpp b/src/drivers/pcm_buffer.cpp index 1e416301..bc58d4b9 100644 --- a/src/drivers/pcm_buffer.cpp +++ b/src/drivers/pcm_buffer.cpp @@ -25,7 +25,8 @@ namespace drivers { [[maybe_unused]] static const char kTag[] = "pcmbuf"; -PcmBuffer::PcmBuffer(size_t size_in_samples) : sent_(0), received_(0) { +PcmBuffer::PcmBuffer(size_t size_in_samples) + : sent_(0), received_(0), suspended_(false) { size_t size_in_bytes = size_in_samples * sizeof(int16_t); ESP_LOGI(kTag, "allocating pcm buffer of size %u (%uKiB)", size_in_samples, size_in_bytes / 1024); @@ -51,6 +52,13 @@ auto PcmBuffer::send(std::span<const int16_t> data) -> size_t { IRAM_ATTR auto PcmBuffer::receive(std::span<int16_t> dest, bool mix, bool isr) -> BaseType_t { + if (suspended_) { + if (!mix) { + std::fill_n(dest.begin(), dest.size(), 0); + } + return false; + } + size_t first_read = 0, second_read = 0; BaseType_t ret1 = false, ret2 = false; std::tie(first_read, ret1) = readSingle(dest, mix, isr); @@ -86,6 +94,10 @@ auto PcmBuffer::isEmpty() -> bool { xRingbufferGetCurFreeSize(ringbuf_); } +auto PcmBuffer::suspend(bool s) -> void { + suspended_ = s; +} + auto PcmBuffer::totalSent() -> uint32_t { return sent_; } |
