summaryrefslogtreecommitdiff
path: root/src/audio/fatfs_audio_input.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-06-07 13:19:45 +1000
committerjacqueline <me@jacqueline.id.au>2023-06-07 13:19:45 +1000
commit1f903accd95361735c841c87fdc6494ad3331b40 (patch)
tree5b69bd0548c06a93852a576fa90a170fa303a15e /src/audio/fatfs_audio_input.cpp
parent2a568846bd8f1c9e23e86e7570557eed6f18cf9f (diff)
downloadtangara-fw-1f903accd95361735c841c87fdc6494ad3331b40.tar.gz
Flesh out audio state machine for playback
Also fix mono playback
Diffstat (limited to 'src/audio/fatfs_audio_input.cpp')
-rw-r--r--src/audio/fatfs_audio_input.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/audio/fatfs_audio_input.cpp b/src/audio/fatfs_audio_input.cpp
index 8abc7d32..9affcf1a 100644
--- a/src/audio/fatfs_audio_input.cpp
+++ b/src/audio/fatfs_audio_input.cpp
@@ -13,8 +13,11 @@
#include <variant>
#include "arena.hpp"
+#include "audio_events.hpp"
+#include "audio_fsm.hpp"
#include "esp_heap_caps.h"
#include "esp_log.h"
+#include "event_queue.hpp"
#include "ff.h"
#include "freertos/portmacro.h"
@@ -69,6 +72,10 @@ auto FatfsAudioInput::Process(const std::vector<InputStream>& inputs,
}
std::size_t max_size = output->data().size_bytes();
+ if (max_size < output->data().size_bytes() / 2) {
+ return;
+ }
+
std::size_t size = 0;
FRESULT result =
f_read(&current_file_, output->data().data(), max_size, &size);
@@ -83,6 +90,12 @@ auto FatfsAudioInput::Process(const std::vector<InputStream>& inputs,
if (size < max_size || f_eof(&current_file_)) {
f_close(&current_file_);
is_file_open_ = false;
+
+ // TODO(jacqueline): MP3 only
+ std::fill_n(output->data().begin(), 8, std::byte(0));
+ output->add(8);
+
+ events::Dispatch<InputFileFinished, AudioState>({});
}
}