2012-03-06 15 views
5

私のアプリケーションには約60のサウンドサンプルがあります。私はそれを時間通りに正確に再生する必要があります。 5ms後になります。サウンドはユーザーの操作に応じて再生する必要があります。だから私は次に何が再生されるのか分からない。すべてのサウンドのSoundEffectInstanceを事前に準備していたと思いました。 SoundEffectInstanceの作成には時間とメモリが必要ですか? SoundEffectの完全なコピーか、ポインタ情報かSoundEffectInstancesを事前に作成するとアプリケーションを改善できますか? XNAでできるだけ早くサンプルを再生する方法はありますか?できるだけ早くサウンドを再生するには?

+0

アプリケーションのすべてのサウンドが必要な場合や、異なる画面に割り当てられているサウンドがある場合はありますか? – Msonic

+0

60音ずつのセットはほとんどありません。ユーザーはセットを選択してからセットの任意のサウンドになる可能性があります – xander27

答えて

3

SoundEffectには、実際の波形データが含まれています。大量のメモリを消費します(波形データに必要な分だけ)。

SoundEffectInstanceは再生(位置、音量など)に関するデータと、再生を行うために割り当てられた「音声」に対するハンドルを含む小さなオブジェクトです。

SoundEffect.Playを使用すると、内部でSoundEffectInstanceが作成されます。また、これらのインスタンスをプールすることもできます。後続の呼び出しで再作成する必要はありません。

SoundEffectInstanceを作成するには、時間とメモリが必要です。 30FPS(フレームあたり33ms)で動作するゲームのサウンドエフェクトについては、レイテンシは知覚できないはずです。


どこでも5msの事項、一緒に異なるサウンドエフェクトを混合することにより、配列決定した音楽を再生しようとしている場合は、DynamicSoundEffectInstanceを使用して、独自のオーディオミキサーを実装する必要があります。これにより、サウンドがサンプルに同期されることが保証されます。


あなたはリアルタイム再生可能な「楽器」のいくつかの種類を作成しようとしている、とあなたがダウン5msのにあなたの入力から出力の待ち時間を取得しようとしている場合は - そして今、あきらめます。 5msは不条理に悪く、通常は専門の機器とソフトウェアが必要です。

入力から出力までの待ち時間をできるだけ短くする必要がある場合は、入力をフレームごとに1回よりも頻繁にポーリングできます。そしておそらくDSEIを使うべきでしょう。私は、DSEIが設定可能な再生バッファサイズを持っているかどうかはわかりませんが、そうであれば、オーディオグリッチを導入することなくできるだけ小さくする必要があります。

2

ユーザーがセットを選択すると、それらのサウンドエフェクトをディクショナリにロードする必要があります。そのため、後でアクセスする方が早くなります。

しかし、すべてのサウンドエフェクト、特に特定の画面またはセットでは不要なサウンドエフェクトを読み込む必要はありません。さらに、必要のないサウンドエフェクトをアンロードする必要があります。

ロードするサイズと数量によっては、これらのサウンドエフェクトをロードするのに時間がかかります。私はあなたのゲームでコンテンツをロード/アンロードするための基本的な読み込み画面を作成することをお勧めします(ほとんどのゲームはそうです)。サウンド効果を短く保つ必要があるのは、ポインタだけでなく、メモリ内にsoundeffect(wav形式のと思いますか?)をロードすることです。

既にロードされているサウンドエフェクトは、非常に速く再生されます(遅延は知覚できません)。メモリ使用量を犠牲にして、プリロードすると、アプリケーションのパフォーマンスがに増加します()。

+0

すべてのサウンドまたはSoundEffectだけにSoundEffectIstanceオブジェクトをプリロードする必要がありますか? – xander27

+1

私はそこに[リンク](http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.audio.soundeffect.aspx)が見つかりました** "SoundEffectから作成されたすべてのSoundEffectInstanceオブジェクトはメモリリソースを共有します"**。だから、私は任意の数の 'SoundEffectInstance'を作成することができます – xander27

関連する問題