diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-06-07 13:19:45 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-06-07 13:19:45 +1000 |
| commit | 1f903accd95361735c841c87fdc6494ad3331b40 (patch) | |
| tree | 5b69bd0548c06a93852a576fa90a170fa303a15e /src/audio/audio_task.cpp | |
| parent | 2a568846bd8f1c9e23e86e7570557eed6f18cf9f (diff) | |
| download | tangara-fw-1f903accd95361735c841c87fdc6494ad3331b40.tar.gz | |
Flesh out audio state machine for playback
Also fix mono playback
Diffstat (limited to 'src/audio/audio_task.cpp')
| -rw-r--r-- | src/audio/audio_task.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/audio/audio_task.cpp b/src/audio/audio_task.cpp index 46d527b5..9dd7d994 100644 --- a/src/audio/audio_task.cpp +++ b/src/audio/audio_task.cpp @@ -15,6 +15,8 @@ #include <memory> #include <variant> +#include "audio_events.hpp" +#include "audio_fsm.hpp" #include "audio_sink.hpp" #include "cbor.h" #include "esp_err.h" @@ -60,6 +62,7 @@ void AudioTaskMain(std::unique_ptr<Pipeline> pipeline, IAudioSink* sink) { std::vector<Pipeline*> all_elements = pipeline->GetIterationOrder(); + bool previously_had_work = false; events::EventQueue& event_queue = events::EventQueue::GetInstance(); while (1) { // First, see if we actually have any pipeline work to do in this iteration. @@ -75,6 +78,11 @@ void AudioTaskMain(std::unique_ptr<Pipeline> pipeline, IAudioSink* sink) { } } + if (previously_had_work && !has_work) { + events::Dispatch<AudioPipelineIdle, AudioState>({}); + } + previously_had_work = has_work; + // See if there's any new events. event_queue.ServiceAudio(has_work ? delay_ticks : portMAX_DELAY); @@ -118,6 +126,7 @@ void AudioTaskMain(std::unique_ptr<Pipeline> pipeline, IAudioSink* sink) { if (sink_stream.info().bytes_in_stream == 0) { // No new bytes to sink, so skip sinking completely. + ESP_LOGI(kTag, "no bytes to sink"); continue; } @@ -130,6 +139,7 @@ void AudioTaskMain(std::unique_ptr<Pipeline> pipeline, IAudioSink* sink) { output_format = sink_stream.info().format; sink->Configure(*output_format); } else { + ESP_LOGI(kTag, "waiting to reconfigure"); continue; } } |
