MayaFlux 0.1.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
FileBridgeBuffer.cpp
Go to the documentation of this file.
2
4
7
10
11namespace MayaFlux::Buffers {
12
13FileToStreamChain::FileToStreamChain(std::shared_ptr<Kakshya::SoundFileContainer> file_container,
14 std::shared_ptr<Kakshya::DynamicSoundStream> capture_stream,
15 uint32_t source_channel)
16 : m_file_container(std::move(file_container))
17 , m_capture_stream(std::move(capture_stream))
18 , m_source_channel(source_channel)
19{
21}
22
24{
25 m_container_adapter = std::make_shared<ContainerToBufferAdapter>(
26 std::dynamic_pointer_cast<Kakshya::StreamContainer>(m_file_container));
27 m_stream_writer = std::make_shared<StreamWriteProcessor>(m_capture_stream);
28}
29
30void FileToStreamChain::attach_to_buffer(std::shared_ptr<Buffer> buffer)
31{
32 m_container_adapter->set_source_channel(m_source_channel);
35}
36
37FileBridgeProcessor::FileBridgeProcessor(std::shared_ptr<FileToStreamChain> chain)
38 : m_chain(std::move(chain))
39{
40}
41
42void FileBridgeProcessor::processing_function(std::shared_ptr<Buffer> buffer)
43{
44 if (m_chain) {
45 m_chain->process_non_owning(buffer);
46 }
47}
48
49void FileBridgeProcessor::on_attach(std::shared_ptr<Buffer> buffer)
50{
51 m_attached_buffer = buffer;
52 if (m_chain) {
53 m_chain->attach_to_buffer(buffer);
54 }
55}
56
57void FileBridgeProcessor::on_detach(std::shared_ptr<Buffer> /*buffer*/)
58{
59 m_attached_buffer.reset();
60}
61
63 std::shared_ptr<Kakshya::SoundFileContainer> file_container,
64 uint32_t source_channel)
65 : AudioBuffer(channel_id, Config::get_buffer_size())
66 , m_file_container(std::move(file_container))
67{
68}
69
71{
72 m_capture_stream = std::make_shared<Kakshya::DynamicSoundStream>(
73 Config::get_sample_rate(), m_file_container->get_num_channels());
74
75 m_chain = std::make_shared<FileToStreamChain>(
77
78 m_processor = std::make_shared<FileBridgeProcessor>(m_chain);
80}
81
82} // namespace MayaFlux::Buffers
uint32_t m_channel_id
Audio channel identifier for this buffer.
virtual void set_default_processor(std::shared_ptr< BufferProcessor > processor) override
Sets the default audio transformation processor for this buffer.
Concrete audio implementation of the Buffer interface for double-precision audio data.
bool add_processor(const std::shared_ptr< BufferProcessor > &processor, const std::shared_ptr< Buffer > &buffer, std::string *rejection_reason=nullptr)
Adds a processor to the transformation pipeline for a specific buffer.
std::shared_ptr< FileBridgeProcessor > m_processor
std::shared_ptr< Kakshya::SoundFileContainer > m_file_container
std::shared_ptr< Kakshya::DynamicSoundStream > m_capture_stream
std::shared_ptr< FileToStreamChain > m_chain
FileBridgeBuffer(uint32_t channel_id, std::shared_ptr< Kakshya::SoundFileContainer > file_container, uint32_t source_channel=0)
std::shared_ptr< Buffer > m_attached_buffer
std::shared_ptr< FileToStreamChain > m_chain
void on_attach(std::shared_ptr< Buffer > buffer) override
Called when this processor is attached to a buffer.
void on_detach(std::shared_ptr< Buffer >) override
Called when this processor is detached from a buffer.
FileBridgeProcessor(std::shared_ptr< FileToStreamChain > chain)
void processing_function(std::shared_ptr< Buffer > buffer) override
The core processing function that must be implemented by derived classes.
std::shared_ptr< StreamWriteProcessor > m_stream_writer
std::shared_ptr< ContainerToBufferAdapter > m_container_adapter
void attach_to_buffer(std::shared_ptr< Buffer > buffer)
FileToStreamChain(std::shared_ptr< Kakshya::SoundFileContainer > file_container, std::shared_ptr< Kakshya::DynamicSoundStream > capture_stream, uint32_t source_channel=0)
std::shared_ptr< Kakshya::DynamicSoundStream > m_capture_stream
std::shared_ptr< Kakshya::SoundFileContainer > m_file_container
uint32_t get_sample_rate()
Gets the sample rate from the default engine.
Definition Config.cpp:46