31 }
else if (ctx.
channels.has_value()) {
32 for (uint32_t ch : ctx.
channels.value()) {
35 }
else if (node->get_channel_mask() != 0) {
36 for (uint32_t ch = 0; ch < 32; ++ch) {
37 if (node->get_channel_mask() & (1 << ch)) {
56 "Registering audio network in AUDIO_RATE domain without AUDIO_SINK or AUDIO_COMPUTE mode. Forcing AUDIO_SINK mode.");
61 }
else if (ctx.
channels.has_value()) {
62 for (uint32_t ch : ctx.
channels.value()) {
69 "Registering visual network in VISUAL_RATE domain without GRAPHICS_BIND output mode. Forcing GRAPHICS_BIND mode.");
80 if (
auto audio_buffer = std::dynamic_pointer_cast<Buffers::AudioBuffer>(buffer)) {
83 }
else if (ctx.
channels.has_value()) {
85 for (
size_t i = 1; i < ctx.
channels.value().size(); ++i) {
94 if (
auto vk_buffer = std::dynamic_pointer_cast<Buffers::VKBuffer>(buffer)) {
102 if (
auto sound_container = std::dynamic_pointer_cast<Kakshya::SoundFileContainer>(container)) {
104 (void)
get_io_manager()->hook_audio_container_to_buffers(sound_container);
115 std::vector<std::shared_ptr<Buffers::MeshBuffer>> buffers)
116 : m_buffers(
std::move(buffers))
127 std::static_pointer_cast<Buffers::Buffer>(buf), ctx);
142std::shared_ptr<Nodes::Network::MeshNetwork>
145 return get_io_manager()->load_mesh_network(filepath, std::move(resolver));
152 auto node = std::make_shared<Nodes::Input::HIDNode>(config);
161 auto node = std::make_shared<Nodes::Input::MIDINode>(config);
170 auto node = std::make_shared<Nodes::Input::OSCNode>(config);
179 auto node = std::make_shared<Nodes::Input::TabletNode>(config);
199 "Input type {} not yet implemented",
200 static_cast<int>(binding.
backend));
#define MF_ERROR(comp, ctx,...)
#define MF_WARN(comp, ctx,...)
Core::GlobalNetworkConfig network
Audio file loading and container management API.
std::shared_ptr< Nodes::Input::InputNode > read_input(const Nodes::Input::InputConfig &config, const Core::InputBinding &binding)
Create and register generic input node.
std::shared_ptr< Nodes::Input::HIDNode > read_hid(const Nodes::Input::HIDConfig &config, const Core::InputBinding &binding)
Create and register HID input node.
std::vector< std::shared_ptr< Buffers::MeshBuffer > > load_mesh_buffers(const std::string &filepath)
std::shared_ptr< Nodes::Input::OSCNode > read_osc(const Nodes::Input::OSCConfig &config, const Core::InputBinding &binding)
Create and register OSC input node.
std::shared_ptr< Nodes::Input::TabletNode > read_tablet(const Nodes::Input::TabletConfig &config, const Core::InputBinding &binding)
Create and register tablet input node.
std::shared_ptr< Kakshya::SoundFileContainer > load_sound_container(const std::string &filepath)
std::shared_ptr< Nodes::Input::MIDINode > read_midi(const Nodes::Input::MIDIConfig &config, const Core::InputBinding &binding)
Create and register MIDI input node.
std::shared_ptr< Nodes::Network::MeshNetwork > load_mesh_network(const std::string &filepath, IO::TextureResolver resolver)
std::shared_ptr< Buffers::TextureBuffer > load_image_buffer(const std::string &filepath)
std::vector< std::shared_ptr< Buffers::MeshBuffer > > m_buffers
MeshGroupHandle & operator|(Domain d)
MeshGroupHandle(std::vector< std::shared_ptr< Buffers::MeshBuffer > > buffers)
@ OSC
Open Sound Control (network)
@ TABLET
Digitizers and styluses (pressure, tilt, rotation)
@ HID
Generic HID devices (game controllers, custom hardware)
@ MIDI
MIDI controllers and instruments.
std::function< std::shared_ptr< Core::VKImage >(const std::string &)> TextureResolver
Callable that maps a raw material texture path to a GPU image.
@ Init
Engine/subsystem initialization.
@ API
MayaFlux/API Wrapper and convenience functions.
@ GRAPHICS_BIND
State available for visualization (read-only)
@ AUDIO_COMPUTE
processed each cycle but not sent to output
@ AUDIO_SINK
Aggregated audio samples sent to output.
@ AUDIO_RATE
Nodes that process at the audio sample rate.
@ VISUAL_RATE
Nodes that process at the visual frame rate.
void register_input_node(const std::shared_ptr< Nodes::Input::InputNode > &node, const Core::InputBinding &binding)
Register an input node with specified binding.
Creator vega
Global Creator instance.
void register_node(const std::shared_ptr< Nodes::Node > &node, const Nodes::ProcessingToken &token, uint32_t channel)
MAYAFLUX_API Nodes::ProcessingToken get_node_token(Domain domain)
Extracts node processing token from domain.
void register_buffer(const std::shared_ptr< Buffers::Buffer > &buffer, const CreationContext &ctx)
void register_node_network(const std::shared_ptr< Nodes::Network::NodeNetwork > &network, const Nodes::ProcessingToken &token)
Registers a node network with the default engine's node graph manager.
std::vector< std::shared_ptr< Buffers::AudioBuffer > > clone_buffer_to_channels(const std::shared_ptr< Buffers::AudioBuffer > &buffer, const std::vector< uint32_t > &channels)
Clones a buffer to multiple channels.
void register_audio_buffer(const std::shared_ptr< Buffers::AudioBuffer > &buffer, uint32_t channel)
Registers an AudioBuffer with the default engine's buffer manager.
void register_container(const std::shared_ptr< Kakshya::SoundFileContainer > &container, const Domain &domain)
Domain
Unified domain enum combining all three ProcessingToken subsystems.
@ AUDIO
Standard real-time audio processing domain.
void register_graphics_buffer(const std::shared_ptr< Buffers::VKBuffer > &buffer, Buffers::ProcessingToken token)
Registers a VKBuffer with the default engine's buffer manager.
std::shared_ptr< IO::IOManager > get_io_manager()
Retrieves the global IOManager instance for file loading and buffer management.
void register_network(const std::shared_ptr< Nodes::Network::NodeNetwork > &network, const CreationContext &ctx)
MAYAFLUX_API Buffers::ProcessingToken get_buffer_token(Domain domain)
Extracts buffer processing token from domain.
Main namespace for the Maya Flux audio engine.
std::optional< uint32_t > channel
std::optional< std::vector< uint32_t > > channels
std::optional< Domain > domain