summaryrefslogtreecommitdiff
path: root/src/audio/include
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-11-24 15:13:10 +1100
committerjacqueline <me@jacqueline.id.au>2023-11-24 15:13:10 +1100
commit7c6eb2997cbba350e7384151e13659271508e08f (patch)
treeb6f95a4843521e69b24cbf4c126d84442d19fc23 /src/audio/include
parent230721cd6271f3239b42e1d2471f8db15bebd712 (diff)
downloadtangara-fw-7c6eb2997cbba350e7384151e13659271508e08f.tar.gz
Migrate 'now playing' screen to lua
Diffstat (limited to 'src/audio/include')
-rw-r--r--src/audio/include/audio_decoder.hpp7
-rw-r--r--src/audio/include/audio_events.hpp13
-rw-r--r--src/audio/include/audio_source.hpp27
-rw-r--r--src/audio/include/fatfs_audio_input.hpp4
-rw-r--r--src/audio/include/track_queue.hpp3
5 files changed, 48 insertions, 6 deletions
diff --git a/src/audio/include/audio_decoder.hpp b/src/audio/include/audio_decoder.hpp
index 1759f6e4..318e6fd4 100644
--- a/src/audio/include/audio_decoder.hpp
+++ b/src/audio/include/audio_decoder.hpp
@@ -10,6 +10,7 @@
#include <memory>
#include "audio_converter.hpp"
+#include "audio_events.hpp"
#include "audio_sink.hpp"
#include "audio_source.hpp"
#include "codec.hpp"
@@ -23,11 +24,13 @@ namespace audio {
*/
class Timer {
public:
- Timer(const codecs::ICodec::OutputFormat& format);
+ Timer(std::shared_ptr<Track>, const codecs::ICodec::OutputFormat& format);
auto AddSamples(std::size_t) -> void;
private:
+ std::shared_ptr<Track> track_;
+
uint32_t current_seconds_;
uint32_t current_sample_in_second_;
uint32_t samples_per_second_;
@@ -54,7 +57,7 @@ class Decoder {
Decoder(std::shared_ptr<IAudioSource> source,
std::shared_ptr<SampleConverter> converter);
- auto BeginDecoding(std::shared_ptr<codecs::IStream>) -> bool;
+ auto BeginDecoding(std::shared_ptr<TaggedStream>) -> bool;
auto ContinueDecoding() -> bool;
std::shared_ptr<IAudioSource> source_;
diff --git a/src/audio/include/audio_events.hpp b/src/audio/include/audio_events.hpp
index b130938c..9994a9f6 100644
--- a/src/audio/include/audio_events.hpp
+++ b/src/audio/include/audio_events.hpp
@@ -8,20 +8,31 @@
#include <stdint.h>
#include <cstdint>
+#include <memory>
#include <string>
#include "tinyfsm.hpp"
#include "track.hpp"
#include "track_queue.hpp"
+#include "types.hpp"
namespace audio {
+struct Track {
+ std::shared_ptr<database::TrackTags> tags;
+ std::shared_ptr<database::TrackData> db_info;
+
+ uint32_t duration;
+ uint32_t bitrate_kbps;
+ codecs::StreamType encoding;
+};
+
struct PlaybackStarted : tinyfsm::Event {};
struct PlaybackUpdate : tinyfsm::Event {
uint32_t seconds_elapsed;
- uint32_t seconds_total;
+ std::shared_ptr<Track> track;
};
struct PlaybackFinished : tinyfsm::Event {};
diff --git a/src/audio/include/audio_source.hpp b/src/audio/include/audio_source.hpp
index a0d690a6..a54cb260 100644
--- a/src/audio/include/audio_source.hpp
+++ b/src/audio/include/audio_source.hpp
@@ -6,16 +6,41 @@
#pragma once
+#include <memory>
#include "codec.hpp"
+#include "track.hpp"
+#include "types.hpp"
namespace audio {
+class TaggedStream : public codecs::IStream {
+ public:
+ TaggedStream(std::shared_ptr<database::TrackTags>,
+ std::unique_ptr<codecs::IStream> wrapped);
+
+ auto tags() -> std::shared_ptr<database::TrackTags>;
+
+ auto Read(cpp::span<std::byte> dest) -> ssize_t override;
+
+ auto CanSeek() -> bool override;
+
+ auto SeekTo(int64_t destination, SeekFrom from) -> void override;
+
+ auto CurrentPosition() -> int64_t override;
+
+ auto SetPreambleFinished() -> void override;
+
+ private:
+ std::shared_ptr<database::TrackTags> tags_;
+ std::unique_ptr<codecs::IStream> wrapped_;
+};
+
class IAudioSource {
public:
virtual ~IAudioSource() {}
virtual auto HasNewStream() -> bool = 0;
- virtual auto NextStream() -> std::shared_ptr<codecs::IStream> = 0;
+ virtual auto NextStream() -> std::shared_ptr<TaggedStream> = 0;
};
} // namespace audio
diff --git a/src/audio/include/fatfs_audio_input.hpp b/src/audio/include/fatfs_audio_input.hpp
index 9b516478..c7d52ca3 100644
--- a/src/audio/include/fatfs_audio_input.hpp
+++ b/src/audio/include/fatfs_audio_input.hpp
@@ -43,7 +43,7 @@ class FatfsAudioInput : public IAudioSource {
auto SetPath() -> void;
auto HasNewStream() -> bool override;
- auto NextStream() -> std::shared_ptr<codecs::IStream> override;
+ auto NextStream() -> std::shared_ptr<TaggedStream> override;
FatfsAudioInput(const FatfsAudioInput&) = delete;
FatfsAudioInput& operator=(const FatfsAudioInput&) = delete;
@@ -58,7 +58,7 @@ class FatfsAudioInput : public IAudioSource {
tasks::Worker& bg_worker_;
std::mutex new_stream_mutex_;
- std::shared_ptr<codecs::IStream> new_stream_;
+ std::shared_ptr<TaggedStream> new_stream_;
std::atomic<bool> has_new_stream_;
diff --git a/src/audio/include/track_queue.hpp b/src/audio/include/track_queue.hpp
index 49c0d61b..0be2384a 100644
--- a/src/audio/include/track_queue.hpp
+++ b/src/audio/include/track_queue.hpp
@@ -72,6 +72,9 @@ class TrackQueue {
*/
auto Clear() -> void;
+ auto Position() -> size_t;
+ auto Size() -> size_t;
+
TrackQueue(const TrackQueue&) = delete;
TrackQueue& operator=(const TrackQueue&) = delete;