Lav_PUBLIC_FUNCTION LavError Lav_createGainNode(LavHandle serverHandle, int channels, LavHandle* destination) { PUB_BEGIN auto server = incomingObject<Server>(serverHandle); LOCK(*server); auto retval= createGainNode(server); retval->resize(channels, channels); retval->appendInputConnection(0, channels); retval->appendOutputConnection(0, channels); *destination =outgoingObject<Node>(retval); PUB_END }
MultipannerNode::MultipannerNode(std::shared_ptr<Simulation> sim, std::shared_ptr<HrtfData> hrtf): SubgraphNode(Lav_OBJTYPE_MULTIPANNER_NODE, sim) { hrtf_panner = createHrtfNode(sim, hrtf); amplitude_panner = createAmplitudePannerNode(sim); input=createGainNode(simulation); input->resize(1, 1); input->appendInputConnection(0, 1); input->appendOutputConnection(0, 1); input->connect(0, hrtf_panner, 0); input->connect(0, amplitude_panner, 0); appendOutputConnection(0, 0); setInputNode(input); }
EnvironmentNode::EnvironmentNode(std::shared_ptr<Simulation> simulation, std::shared_ptr<HrtfData> hrtf): SubgraphNode(Lav_OBJTYPE_ENVIRONMENT_NODE, simulation) { this->hrtf = hrtf; int channels = getProperty(Lav_ENVIRONMENT_OUTPUT_CHANNELS).getIntValue(); output = createGainNode(simulation); output->resize(channels, channels); output->appendInputConnection(0, channels); output->appendOutputConnection(0, channels); appendOutputConnection(0, channels); setOutputNode(output); environment_info.world_to_listener_transform = glm::lookAt( glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 0.0f, -1.0f), glm::vec3(0.0f, 1.0f, 0.0f)); }
PannerBankNode::PannerBankNode(std::shared_ptr<Simulation> sim, int pannerCount, std::shared_ptr<HrtfData> hrtf): SubgraphNode(Lav_OBJTYPE_PANNER_BANK_NODE, sim) { if(pannerCount < 2) ERROR(Lav_ERROR_RANGE, "Must use at least 2 panners."); input_gain = createGainNode(simulation); output_gain =createGainNode(simulation); input_gain->resize(pannerCount, pannerCount); for(int i = 0; i < pannerCount; i++) { input_gain->appendInputConnection(i, 1); input_gain->appendOutputConnection(i, 1); } output_gain->resize(2, 2); output_gain->appendInputConnection(0, 2); output_gain->appendOutputConnection(0, 2); setInputNode(input_gain); setOutputNode(output_gain); for(int i = 0; i < pannerCount; i++) { panners.push_back(createMultipannerNode(simulation, hrtf)); input_gain->connect(i, panners[i], 0); panners[i]->connect(0, output_gain, 0); } appendOutputConnection(0, 2); }
RingmodNode::RingmodNode(std::shared_ptr<Server> s): Node(Lav_OBJTYPE_RINGMOD_NODE, s, 2, 1) { appendInputConnection(0, 1); appendInputConnection(1, 1); appendOutputConnection(0, 1); setShouldZeroOutputBuffers(false); }
SquareNode::SquareNode(std::shared_ptr<Simulation> simulation): Node(Lav_OBJTYPE_SQUARE_NODE, simulation, 0, 1) { appendOutputConnection(0, 1); }
BufferNode::BufferNode(std::shared_ptr<Simulation> simulation): Node(Lav_OBJTYPE_BUFFER_NODE, simulation, 0, 1), player(simulation->getBlockSize(), simulation->getSr()) { appendOutputConnection(0, 1); getProperty(Lav_BUFFER_BUFFER).setPostChangedCallback([&] () {bufferChanged();}); end_callback = std::make_shared<Callback<void()>>(); }
HrtfNode::HrtfNode(std::shared_ptr<Simulation> simulation, std::shared_ptr<HrtfData> hrtf): Node(Lav_OBJTYPE_HRTF_NODE, simulation, 1, 2), panner(simulation->getBlockSize(), simulation->getSr(), hrtf) { appendInputConnection(0, 1); appendOutputConnection(0, 2); }
AdditiveTriangleNode::AdditiveTriangleNode(std::shared_ptr<Simulation> simulation): Node(Lav_OBJTYPE_ADDITIVE_TRIANGLE_NODE, simulation, 0, 1), oscillator(simulation->getSr()) { appendOutputConnection(0, 1); setShouldZeroOutputBuffers(false); }
BlitNode::BlitNode(std::shared_ptr<Server> server): Node(Lav_OBJTYPE_BLIT_NODE, server, 0, 1), oscillator(server->getSr()) { appendOutputConnection(0, 1); setShouldZeroOutputBuffers(false); }
BufferTimelineNode::BufferTimelineNode(std::shared_ptr<Simulation> simulation, int channels): Node(Lav_OBJTYPE_BUFFER_TIMELINE_NODE, simulation, 0, channels) { if(channels <= 0) ERROR(Lav_ERROR_RANGE, "Channels must be greater than 0."); appendOutputConnection(0, channels); output_channels= channels; }
SineNode::SineNode(std::shared_ptr<Simulation> simulation): Node(Lav_OBJTYPE_SINE_NODE, simulation, 0, 1), oscillator(simulation->getSr()) { appendOutputConnection(0, 1); }