Lav_PUBLIC_FUNCTION LavError Lav_createMultipannerNode(LavHandle simulationHandle, char* hrtfPath, LavHandle* destination) { PUB_BEGIN auto simulation = incomingObject<Simulation>(simulationHandle); LOCK(*simulation); auto hrtf = createHrtfFromString(hrtfPath, simulation->getSr()); *destination = outgoingObject<Node>(createMultipannerNode(simulation, hrtf)); PUB_END }
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); }
std::shared_ptr<Node> EnvironmentNode::createPannerNode() { auto pan = createMultipannerNode(simulation, hrtf); pan->connect(0, output, 0); return pan; }