MayaFlux 1.0.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ write() [5/16]

void MayaFlux::Portal::Forma::Bridge::write ( const ElementRef &  ref,
std::shared_ptr< Buffers::AudioWriteProcessor >  target 
)

Route element value to an AudioWriteProcessor each frame.

Parameters
refOwning Layer and element id.
targetAudioWriteProcessor to call set_data() on.

Definition at line 183 of file Bridge.cpp.

184{
185 auto* rec = find_record(ref);
186 if (!rec) {
188 "Bridge::write: unknown element id {}", ref.second);
189 return;
190 }
191
192 auto name = make_task_name(ref.second, "audio");
193 rec->outbound_tasks.push_back(name);
194
195 auto bulk = rec->bulk_reader;
196 auto reader = rec->reader;
197
198 if (bulk) {
199 auto routine = [](Vruta::TaskScheduler&,
200 std::function<std::vector<float>()> b,
201 std::shared_ptr<Buffers::AudioWriteProcessor> proc)
202 -> Vruta::GraphicsRoutine {
203 auto& p = co_await Kriya::GetGraphicsPromise {};
204 while (!p.should_terminate) {
205 proc->set_data(std::span<const float>(b()));
206 co_await Kriya::FrameDelay { .frames_to_wait = 1 };
207 }
208 };
210 std::make_shared<Vruta::GraphicsRoutine>(
211 routine(m_scheduler, std::move(bulk), std::move(target))),
212 name, false);
213 } else {
214 auto routine = [](Vruta::TaskScheduler&,
215 std::function<float()> r,
216 std::shared_ptr<Buffers::AudioWriteProcessor> proc)
217 -> Vruta::GraphicsRoutine {
218 auto& p = co_await Kriya::GetGraphicsPromise {};
219 while (!p.should_terminate) {
220 proc->set_data(std::vector<double> { static_cast<double>(r()) });
221 co_await Kriya::FrameDelay { .frames_to_wait = 1 };
222 }
223 };
225 std::make_shared<Vruta::GraphicsRoutine>(
226 routine(m_scheduler, std::move(reader), std::move(target))),
227 name, false);
228 }
229}
#define MF_ERROR(comp, ctx,...)
size_t b
std::string name
Definition VKDevice.cpp:123
Vruta::TaskScheduler & m_scheduler
Definition Bridge.hpp:693
std::string make_task_name(uint32_t id, const char *suffix) const
Definition Bridge.cpp:416
ElementRecord * find_record(const ElementRef &ref)
Definition Bridge.cpp:406
void add_task(const std::shared_ptr< Routine > &routine, const std::string &name="", bool initialize=false)
Add a routine to the scheduler based on its processing token.
Definition Scheduler.cpp:94
@ Init
Engine/subsystem initialization.
@ Portal
High-level user-facing API layer.
GetPromiseBase< Vruta::graphics_promise > GetGraphicsPromise
Graphics domain promise accessor.

References MayaFlux::Vruta::TaskScheduler::add_task(), b, find_record(), MayaFlux::Kriya::FrameDelay::frames_to_wait, MayaFlux::Journal::Init, m_scheduler, make_task_name(), MF_ERROR, name, and MayaFlux::Journal::Portal.

+ Here is the call graph for this function: