summaryrefslogtreecommitdiff
path: root/src/audio/include
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-06-19 08:51:34 +1000
committerjacqueline <me@jacqueline.id.au>2023-06-19 08:51:34 +1000
commit6ff8b5886ef91ed46dba08686900d519f6c9c62d (patch)
tree133daa91898e047fd93a5e83ba6990af2904e5a1 /src/audio/include
parent4e5dba158367f9b8b440e6c5051c95d9c22b76d7 (diff)
downloadtangara-fw-6ff8b5886ef91ed46dba08686900d519f6c9c62d.tar.gz
Support playing tracks by track id
Diffstat (limited to 'src/audio/include')
-rw-r--r--src/audio/include/audio_events.hpp2
-rw-r--r--src/audio/include/audio_fsm.hpp11
-rw-r--r--src/audio/include/fatfs_audio_input.hpp3
3 files changed, 14 insertions, 2 deletions
diff --git a/src/audio/include/audio_events.hpp b/src/audio/include/audio_events.hpp
index eebf5efe..60a0740c 100644
--- a/src/audio/include/audio_events.hpp
+++ b/src/audio/include/audio_events.hpp
@@ -21,9 +21,9 @@ struct PlayFile : tinyfsm::Event {
struct PlayTrack : tinyfsm::Event {
database::TrackId id;
std::optional<database::TrackData> data;
- std::optional<database::TrackTags> tags;
};
+struct InputFileOpened : tinyfsm::Event {};
struct InputFileFinished : tinyfsm::Event {};
struct AudioPipelineIdle : tinyfsm::Event {};
diff --git a/src/audio/include/audio_fsm.hpp b/src/audio/include/audio_fsm.hpp
index 72654ab5..bd902706 100644
--- a/src/audio/include/audio_fsm.hpp
+++ b/src/audio/include/audio_fsm.hpp
@@ -38,10 +38,13 @@ class AudioState : public tinyfsm::Fsm<AudioState> {
/* Fallback event handler. Does nothing. */
void react(const tinyfsm::Event& ev) {}
+ void react(const system_fsm::StorageMounted&);
+
virtual void react(const system_fsm::BootComplete&) {}
virtual void react(const PlayTrack&) {}
virtual void react(const PlayFile&) {}
+ virtual void react(const InputFileOpened&) {}
virtual void react(const InputFileFinished&) {}
virtual void react(const AudioPipelineIdle&) {}
@@ -69,8 +72,10 @@ class Uninitialised : public AudioState {
class Standby : public AudioState {
public:
- void react(const PlayTrack&) override {}
+ void react(const InputFileOpened&) override;
+ void react(const PlayTrack&) override;
void react(const PlayFile&) override;
+
using AudioState::react;
};
@@ -79,6 +84,10 @@ class Playback : public AudioState {
void entry() override;
void exit() override;
+ void react(const PlayTrack&) override;
+ void react(const PlayFile&) override;
+
+ void react(const InputFileOpened&) override;
void react(const InputFileFinished&) override;
void react(const AudioPipelineIdle&) override;
diff --git a/src/audio/include/fatfs_audio_input.hpp b/src/audio/include/fatfs_audio_input.hpp
index f5a65d0d..ab392f54 100644
--- a/src/audio/include/fatfs_audio_input.hpp
+++ b/src/audio/include/fatfs_audio_input.hpp
@@ -7,6 +7,7 @@
#pragma once
#include <cstdint>
+#include <future>
#include <memory>
#include <string>
#include <vector>
@@ -33,6 +34,7 @@ class FatfsAudioInput : public IAudioElement {
FatfsAudioInput();
~FatfsAudioInput();
+ auto OpenFile(std::future<std::optional<std::string>>&& path) -> void;
auto OpenFile(const std::string& path) -> bool;
auto NeedsToProcess() const -> bool override;
@@ -47,6 +49,7 @@ class FatfsAudioInput : public IAudioElement {
auto ContainerToStreamType(database::Encoding)
-> std::optional<codecs::StreamType>;
+ std::optional<std::future<std::optional<std::string>>> pending_path_;
FIL current_file_;
bool is_file_open_;