Fmod の 3D サウンド ワールドの異なる場所に複数のサウンドを配置することは可能ですか? この 3D ワールド内のすべてのサウンドをプロットして、プレーヤーの周りを移動したいと考えています。
私はiPhone用に開発しています。
次のコードを使用すると、FmodDesignerでイベントに作成されたいくつかのサウンドを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の世界に配置したいサウンドの1つです。
result = group->getEvent("Event 1", FMOD_EVENT_DEFAULT, &event1);
ERRCHECK(result);
イベント2は、同じサウンドランドスケープに配置したいもう1つのイベントです。
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);
イベントの1つの位置を、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);
2つのイベントをトリガーし、それらがリスナー内をどのように移動するかを聞きます。
result = event1->start();
ERRCHECK(result);
result = event2->start();
ERRCHECK(result);
チャネルまたはイベントを3Dの場所に配置するには、Channel::set3DAttributesまたはEvent::set3DAttributesのいずれかを使用します。これらの関数は、3Dワールド位置と方向ベクトルを取ります。
3Dの世界を「歩き回る」場合は、System::set3DListenerAttributesまたはEventSystem::set3DListenerAttributesのいずれかを使用してリスナーの位置を調整する必要があります(FMOD低レベルAPIまたはFMODイベントシステムAPIのどちらを使用しているかによって異なります。これらの関数は位置ベクトル、速度ベクトル、前方ベクトル、上方ベクトル。
上記の関数の詳細については、FMODに付属の3Dの例を参照し、fmodex.chmを確認することをお勧めします。