From 1f903accd95361735c841c87fdc6494ad3331b40 Mon Sep 17 00:00:00 2001 From: jacqueline Date: Wed, 7 Jun 2023 13:19:45 +1000 Subject: Flesh out audio state machine for playback Also fix mono playback --- src/audio/audio_task.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/audio/audio_task.cpp') 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 #include +#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, IAudioSink* sink) { std::vector 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, IAudioSink* sink) { } } + if (previously_had_work && !has_work) { + events::Dispatch({}); + } + 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, 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, IAudioSink* sink) { output_format = sink_stream.info().format; sink->Configure(*output_format); } else { + ESP_LOGI(kTag, "waiting to reconfigure"); continue; } } -- cgit v1.2.3