summaryrefslogtreecommitdiff
path: root/src/audio/audio_playback.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-04-26 08:49:02 +1000
committerjacqueline <me@jacqueline.id.au>2023-04-26 08:49:02 +1000
commit7972bd4567a99179338259e9e6ce19168c2c0db3 (patch)
treef46642afd36011d3d064e022232e77744b82c6ae /src/audio/audio_playback.cpp
parent4887f3789817f87bf1272af0b52684e3364270c2 (diff)
parent5575378c1c8171cd716b79d3ab89df1e56ceb9d3 (diff)
downloadtangara-fw-7972bd4567a99179338259e9e6ce19168c2c0db3.tar.gz
Merge branch 'main' into leveldb
Diffstat (limited to 'src/audio/audio_playback.cpp')
-rw-r--r--src/audio/audio_playback.cpp61
1 files changed, 18 insertions, 43 deletions
diff --git a/src/audio/audio_playback.cpp b/src/audio/audio_playback.cpp
index c95a5d63..c51e41fb 100644
--- a/src/audio/audio_playback.cpp
+++ b/src/audio/audio_playback.cpp
@@ -5,71 +5,46 @@
#include <memory>
#include <string_view>
+#include "driver_cache.hpp"
#include "freertos/portmacro.h"
#include "audio_decoder.hpp"
+#include "audio_element.hpp"
#include "audio_task.hpp"
#include "chunk.hpp"
#include "fatfs_audio_input.hpp"
#include "gpio_expander.hpp"
#include "i2s_audio_output.hpp"
+#include "pipeline.hpp"
#include "storage.hpp"
#include "stream_buffer.hpp"
#include "stream_info.hpp"
#include "stream_message.hpp"
namespace audio {
-
-auto AudioPlayback::create(drivers::GpioExpander* expander,
- std::shared_ptr<drivers::SdStorage> storage)
- -> cpp::result<std::unique_ptr<AudioPlayback>, Error> {
- // Create everything
- auto source = std::make_shared<FatfsAudioInput>(storage);
- auto codec = std::make_shared<AudioDecoder>();
-
- auto sink_res = I2SAudioOutput::create(expander);
- if (sink_res.has_error()) {
- return cpp::fail(ERR_INIT_ELEMENT);
- }
- auto sink = sink_res.value();
-
- auto playback = std::make_unique<AudioPlayback>();
-
- // Configure the pipeline
- playback->ConnectElements(source.get(), codec.get());
- playback->ConnectElements(codec.get(), sink.get());
-
- // Launch!
- StartAudioTask("src", {}, source);
- StartAudioTask("dec", {}, codec);
- StartAudioTask("sink", 0, sink);
-
- playback->input_handle_ = source->InputEventQueue();
-
- return playback;
+AudioPlayback::AudioPlayback(drivers::DriverCache* drivers)
+ : file_source_(std::make_unique<FatfsAudioInput>()),
+ i2s_output_(std::make_unique<I2SAudioOutput>(drivers->AcquireGpios(),
+ drivers->AcquireDac())) {
+ AudioDecoder* codec = new AudioDecoder();
+ elements_.emplace_back(codec);
+
+ Pipeline* pipeline = new Pipeline(elements_.front().get());
+ pipeline->AddInput(file_source_.get());
+
+ task::StartPipeline(pipeline, i2s_output_.get());
+ // task::StartDrain(i2s_output_.get());
}
-AudioPlayback::AudioPlayback() {}
-
AudioPlayback::~AudioPlayback() {}
auto AudioPlayback::Play(const std::string& filename) -> void {
- StreamInfo info;
- info.path = filename;
- auto event = StreamEvent::CreateStreamInfo(input_handle_, info);
- xQueueSend(input_handle_, &event, portMAX_DELAY);
- event = StreamEvent::CreateEndOfStream(input_handle_);
- xQueueSend(input_handle_, &event, portMAX_DELAY);
+ // TODO: concurrency, yo!
+ file_source_->OpenFile(filename);
}
auto AudioPlayback::LogStatus() -> void {
- auto event = StreamEvent::CreateLogStatus();
- xQueueSendToFront(input_handle_, &event, portMAX_DELAY);
-}
-
-auto AudioPlayback::ConnectElements(IAudioElement* src, IAudioElement* sink)
- -> void {
- src->OutputEventQueue(sink->InputEventQueue());
+ i2s_output_->Log();
}
} // namespace audio