Пример #1
0
void MultipannerNode::strategyChanged() {
	int newStrategy = getProperty(Lav_PANNER_STRATEGY).getIntValue();
	int newOutputSize=2;
	bool hookHrtf = false, hookAmplitude = false;
	switch(newStrategy) {
		case Lav_PANNING_STRATEGY_HRTF:
		hookHrtf = true;
		break;
		case Lav_PANNING_STRATEGY_STEREO:
		std::dynamic_pointer_cast<AmplitudePannerNode>(amplitude_panner)->configureStandardChannelMap(2);
		hookAmplitude = true;
		break;
		case Lav_PANNING_STRATEGY_SURROUND40:
		std::dynamic_pointer_cast<AmplitudePannerNode>(amplitude_panner)->configureStandardChannelMap(4);
		hookAmplitude = true;
		newOutputSize = 4;
		break;
		case Lav_PANNING_STRATEGY_SURROUND51:
		std::dynamic_pointer_cast<AmplitudePannerNode>(amplitude_panner)->configureStandardChannelMap(6);
		hookAmplitude = true;
		newOutputSize=6;
		break;
		case Lav_PANNING_STRATEGY_SURROUND71:
		std::dynamic_pointer_cast<AmplitudePannerNode>(amplitude_panner)->configureStandardChannelMap(8);
		hookAmplitude=true;
		newOutputSize=8;
		break;
	}
	if(hookAmplitude) {
		getOutputConnection(0)->reconfigure(0, newOutputSize);
		setOutputNode(amplitude_panner);
		current_panner = amplitude_panner;
	}
	if(hookHrtf) {
		getOutputConnection(0)->reconfigure(0, 2);
		setOutputNode(hrtf_panner);
		current_panner = hrtf_panner;
	}
}
Пример #2
0
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));
}
Пример #3
0
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);
}
Пример #4
0
void NeuralNetwork::calculate()
{
    // 中間層の計算
    for(int m = 0; m < middle_nodes.size(); ++m)
    {
        Node middle = middle_nodes.at(m);
        middle.value = 0;

        vector<Edge> edges = getBeforeEdges(middle.id);
        for(int i = 0; i < input_nodes.size(); ++i)
        {
            Edge e = edges.at(i);
            middle.value += e.weight * input_nodes.at(i).value;
        }

        middle.value = sigmoid(middle.value);
        setMiddleNode(middle.id, middle.value);
    }

    // 出力層の計算
    for(int o = 0; o < output_nodes.size(); ++o)
    {
        Node output = output_nodes.at(o);
        output.value = 0;

        vector<Edge> edges = getAfterEdges(output.id);
        for(int m = 0; m < middle_nodes.size(); ++m)
        {
            Edge e = edges.at(m);
            output.value += e.weight * middle_nodes.at(m).value;
        }

        output.value = sigmoid(output.value);
        setOutputNode(output.id, output.value);
    }
}