summaryrefslogtreecommitdiff
path: root/src/audio/include
diff options
context:
space:
mode:
authorailurux <ailurux@noreply.codeberg.org>2024-02-29 05:23:33 +0000
committerailurux <ailurux@noreply.codeberg.org>2024-02-29 05:23:33 +0000
commitaa87c13799f5d71773b7c73135006acb592182d0 (patch)
tree3c6ef26e5a00eecb0e4319377b4bccd71235e9ac /src/audio/include
parent173b09b0151ae765b1a8e69dfb60d14d502801f6 (diff)
parente7e6c70fb31d33ae1e79f9841f5b6fe227f6ebf3 (diff)
downloadtangara-fw-aa87c13799f5d71773b7c73135006acb592182d0.tar.gz
Merge pull request 'Add seeking support for all codecs' (#50) from seek-support into main
Reviewed-on: https://codeberg.org/cool-tech-zone/tangara-fw/pulls/50 Reviewed-by: ailurux <ailurux@noreply.codeberg.org>
Diffstat (limited to 'src/audio/include')
-rw-r--r--src/audio/include/audio_decoder.hpp2
-rw-r--r--src/audio/include/audio_events.hpp6
-rw-r--r--src/audio/include/audio_fsm.hpp3
-rw-r--r--src/audio/include/audio_source.hpp11
-rw-r--r--src/audio/include/fatfs_audio_input.hpp4
5 files changed, 22 insertions, 4 deletions
diff --git a/src/audio/include/audio_decoder.hpp b/src/audio/include/audio_decoder.hpp
index 318e6fd4..b8aac710 100644
--- a/src/audio/include/audio_decoder.hpp
+++ b/src/audio/include/audio_decoder.hpp
@@ -24,7 +24,7 @@ namespace audio {
*/
class Timer {
public:
- Timer(std::shared_ptr<Track>, const codecs::ICodec::OutputFormat& format);
+ Timer(std::shared_ptr<Track>, const codecs::ICodec::OutputFormat& format, uint32_t current_seconds = 0);
auto AddSamples(std::size_t) -> void;
diff --git a/src/audio/include/audio_events.hpp b/src/audio/include/audio_events.hpp
index a79ca4ec..d55e4e0d 100644
--- a/src/audio/include/audio_events.hpp
+++ b/src/audio/include/audio_events.hpp
@@ -25,6 +25,7 @@ struct Track {
uint32_t duration;
uint32_t bitrate_kbps;
codecs::StreamType encoding;
+ std::string filepath;
};
struct PlaybackStarted : tinyfsm::Event {};
@@ -51,6 +52,11 @@ struct PlayFile : tinyfsm::Event {
std::string filename;
};
+struct SeekFile : tinyfsm::Event {
+ uint32_t offset;
+ std::string filename;
+};
+
struct StepUpVolume : tinyfsm::Event {};
struct StepDownVolume : tinyfsm::Event {};
struct SetVolume : tinyfsm::Event {
diff --git a/src/audio/include/audio_fsm.hpp b/src/audio/include/audio_fsm.hpp
index 2d335e74..13e241be 100644
--- a/src/audio/include/audio_fsm.hpp
+++ b/src/audio/include/audio_fsm.hpp
@@ -57,6 +57,7 @@ class AudioState : public tinyfsm::Fsm<AudioState> {
virtual void react(const system_fsm::BluetoothEvent&);
virtual void react(const PlayFile&) {}
+ virtual void react(const SeekFile&) {}
virtual void react(const QueueUpdate&) {}
virtual void react(const PlaybackUpdate&) {}
void react(const TogglePlayPause&);
@@ -102,6 +103,7 @@ class Uninitialised : public AudioState {
class Standby : public AudioState {
public:
void react(const PlayFile&) override;
+ void react(const SeekFile&) override;
void react(const internal::InputFileOpened&) override;
void react(const QueueUpdate&) override;
void react(const system_fsm::KeyLockChanged&) override;
@@ -118,6 +120,7 @@ class Playback : public AudioState {
void react(const system_fsm::HasPhonesChanged&) override;
void react(const PlayFile&) override;
+ void react(const SeekFile&) override;
void react(const QueueUpdate&) override;
void react(const PlaybackUpdate&) override;
diff --git a/src/audio/include/audio_source.hpp b/src/audio/include/audio_source.hpp
index 68145f5b..b38acd7a 100644
--- a/src/audio/include/audio_source.hpp
+++ b/src/audio/include/audio_source.hpp
@@ -16,7 +16,10 @@ namespace audio {
class TaggedStream : public codecs::IStream {
public:
TaggedStream(std::shared_ptr<database::TrackTags>,
- std::unique_ptr<codecs::IStream> wrapped);
+ std::unique_ptr<codecs::IStream> wrapped,
+ std::string path,
+ uint32_t offset = 0
+ );
auto tags() -> std::shared_ptr<database::TrackTags>;
@@ -30,11 +33,17 @@ class TaggedStream : public codecs::IStream {
auto Size() -> std::optional<int64_t> override;
+ auto Offset() -> uint32_t;
+
+ auto Filepath() -> std::string;
+
auto SetPreambleFinished() -> void override;
private:
std::shared_ptr<database::TrackTags> tags_;
std::unique_ptr<codecs::IStream> wrapped_;
+ std::string filepath_;
+ int32_t offset_;
};
class IAudioSource {
diff --git a/src/audio/include/fatfs_audio_input.hpp b/src/audio/include/fatfs_audio_input.hpp
index 4cccbb46..10b7433e 100644
--- a/src/audio/include/fatfs_audio_input.hpp
+++ b/src/audio/include/fatfs_audio_input.hpp
@@ -39,7 +39,7 @@ class FatfsAudioInput : public IAudioSource {
* given file path.
*/
auto SetPath(std::optional<std::string>) -> void;
- auto SetPath(const std::string&) -> void;
+ auto SetPath(const std::string&,uint32_t offset = 0) -> void;
auto SetPath() -> void;
auto HasNewStream() -> bool override;
@@ -49,7 +49,7 @@ class FatfsAudioInput : public IAudioSource {
FatfsAudioInput& operator=(const FatfsAudioInput&) = delete;
private:
- auto OpenFile(const std::string& path) -> bool;
+ auto OpenFile(const std::string& path,uint32_t offset) -> bool;
auto ContainerToStreamType(database::Container)
-> std::optional<codecs::StreamType>;