Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone Fmod侦听器位置_Iphone_Fmod - Fatal编程技术网

Iphone Fmod侦听器位置

Iphone Fmod侦听器位置,iphone,fmod,Iphone,Fmod,在Fmod中,3D声音世界中的不同位置是否可能有多个声音?我想画出这个3D世界中的所有声音,并在播放器周围移动 我正在为iPhone开发。若要在3D位置放置频道或事件,请使用channel::set3DAttributes或event::set3DAttributes,这些函数将获取3D世界位置和方向向量 如果您想在3D世界中“漫游”,则需要使用System::Set3DListenerAttribute或EventSystem::Set3DListenerAttribute调整侦听器位置(取决

在Fmod中,3D声音世界中的不同位置是否可能有多个声音?我想画出这个3D世界中的所有声音,并在播放器周围移动


我正在为iPhone开发。

若要在3D位置放置频道或事件,请使用channel::set3DAttributes或event::set3DAttributes,这些函数将获取3D世界位置和方向向量

如果您想在3D世界中“漫游”,则需要使用System::Set3DListenerAttribute或EventSystem::Set3DListenerAttribute调整侦听器位置(取决于您使用的是FMOD低级API还是FMOD事件系统API。这些函数采用位置向量、速度向量、正向向量和向上向量


我建议参考FMOD附带的3D示例,并检查fmodex.chm以了解有关上述功能的更多详细信息。

以下代码允许我将在FMOD Designer中生成的若干声音放入FMOD的3D世界中:

FMOD_RESULT     result = FMOD_OK;
FMOD_VECTOR     listenerpos = { 0.0f, 0.0f, 1.0f };
FMOD_VECTOR     eventpos        = { 0.0f, 0.0f, 1.0f };
FMOD_VECTOR     eventpos2        = { 0.0f, 0.0f, 1.0f };

float DISTANCEFACTOR          = 2.0f;
事件1是我想在3D世界中播放的声音之一:

result = group->getEvent("Event 1", FMOD_EVENT_DEFAULT, &event1);
ERRCHECK(result);
事件2是我想在相同的声音场景中放置的另一个事件:

result = group->getEvent("Event 2", FMOD_EVENT_DEFAULT, &event2);
ERRCHECK(result);
我把听者的位置放在这个世界的中间:

listenerpos.x = 0;
listenerpos.y = 0;
listenerpos.z = 0;

result = eventSystem->set3DListenerAttributes(0, &listenerpos,NULL,NULL,NULL);
ERRCHECK(result);
我将其中一个事件的位置设置为我在iPhone屏幕上移动的对象:

eventpos.x = xPos;
eventpos.z = yPos;
result = event1->set3DAttributes(&eventpos,&vel);
ERRCHECK(result);
我将另一个事件设置到另一个位置:

eventpos2.x = xPos2;
eventpos2.y = yPos2;

result = event2->set3DAttributes(&eventpos2,&vel);
ERRCHECK(result);
整个事件系统和3D世界将使用以下位置进行更新:

result = eventSystem->update();
ERRCHECK(result);
我触发这两个事件,并听到它们如何在听者周围移动:

result = event1->start();
ERRCHECK(result);

result = event2->start();
ERRCHECK(result);

我使用了Fmod中的一个示例,但不清楚我是否可以定位多个声音。是的,您可以定位任意数量的声音。每个Fmod::Channel表示Fmod::sound的一个播放实例,您可以多次播放同一声音以接收多个频道,每个频道都可以定位。