1

Ogreを使用するゲームでFMODを使用して3Dサウンドを設定しようとしています。サウンドリスナーは、スプライン上で動作するカメラに接続されています。プレーヤーに足音が付いています。音量は、プレーヤーがカメラからどれだけ離れているかによって決まります。

フットステップサウンドは、サウンドリスナーが開始位置から移動していないかのように動作します。レベルの開始時には、足音が大きく、開始から離れると、聞こえなくなるまで足音が静かになります。最初に戻ると、音量が大きくなります。ただし、サウンドリスナーのシーンノードの位置は更新されており、カメラと同期しています。

コードでは、次の行のフレームごとにFMODエラーが生成されています。

result = m_system->set3DListenerAttributes(0, &pos, &vel, &forward, &up);

結果は常にFMOD_ERR_INVALID_HANDLEを返し、次のエラー文字列が含まれます-'無効なオブジェクトハンドルが使用されました'。このエラーが発生している理由がわかりません。パラメータとして渡されるすべてのFMOD_VECTORが初期化され、システムが正しくセットアップされているように見えます。コードはさまざまなクラスのいたるところにありますが、ここに重要な部分があります。

// Initialise FMOD system
result = m_system->init(4093, FMOD_INIT_3D_RIGHTHANDED, 0);
result = m_system->set3DSettings(1.0f, 1.0f, 1.0f);

// Create sound
FMOD_MODE mode = FMOD_SOFTWARE;
if(a_positional)
{
    mode |= FMOD_3D;
}
FMOD_CREATESOUNDEXINFO info;
memset(&info, 0, sizeof(FMOD_CREATESOUNDEXINFO));
info.cbsize = sizeof(FMOD_CREATESOUNDEXINFO);
r = sys->_getFMODSystem()->createSound(a_file.c_str(), mode, &info, &retVal);

// Update sound listener
FMOD_VECTOR pos, vel, forward, up;

pos.x = m_sceneNode->getParentSceneNode()->_getDerivedPosition().x;
pos.y = m_sceneNode->getParentSceneNode()->_getDerivedPosition().y;
pos.z = m_sceneNode->getParentSceneNode()->_getDerivedPosition().z;

vel.x = 0;
vel.y = 0;
vel.z = 0;

forward.x = 0;
forward.y = 0;
forward.z = 1;

up.x = 0;
up.y = 1;
up.z = 0;

result = m_system->set3DListenerAttributes(0, &pos, &vel, &forward, &up);
// FMOD error: (36) An invalid object handle was used.

'result'がこのエラーを返す理由に関するアイデアはありますか?それが3Dサウンドが正しく再生されない理由だと思います。

4

1 に答える 1

2

無効なハンドルエラー(FMOD_ERR_INVALID_HANDLE)は、関数を呼び出しているオブジェクトを参照しています。この場合、m_systemハンドルが無効であることを意味します。

最初に、FMOD :: Systemオブジェクトを作成するためのコードを省略していることに気付きました。次のことを行っていることを確認できますか?

result = FMOD::System_Create(&m_system);

次に、そのコードがどこかにある場合、m_systemの値が作成されてから使用されるまでの間、変更されないことを確認できます(おそらく何かがハンドルを破損しています)。

最後に(長い目で見れば)ヘッダーとライブラリが同期していない場合は、異なるエラーメッセージが表示される可能性があります。使用しているヘッダーとライブラリが、すべて同じバージョンのFMODのものであることを確認してください。

さらに、ログバージョンのFMODとリンクしてみてください。状況に役立つ可能性のある、TTYでの有用なデバッグ出力が得られるはずです。

于 2010-10-05T22:47:26.823 に答える