AndroidのSoundPool
を、汎用ゲーム開発ライブラリにサウンドエフェクトを実装するメカニズムとして見ていました。 Itseemed理想。
しかし、ちょっとした研究では、SoundPool
に allkindsofbugs があることが示されています。 SoundPool
のバグはまだ関連していますか?
私はライブラリを開発しているので、SoundPool
のバグはすべてライブラリのバグになり、ユーザーをそれから隔離したいと思います。
だから私の質問は基本的に:オーディオにどのAPIを使うべきですか?
AudioTrack
を使用して独自のミキサーを作成することは問題外ではありません。しかし、明らかにそれを避けることが望ましいでしょう。また、デコードを提供するAPIはありますか?
私は、合理的な数の同時音響効果(少なくとも16個)を再生し、さらにオープンにする必要があります。音は低遅延で再生を開始する必要があります。 WAV
ファイルをサポートする必要があります(MP3/Oggは重要ではありません)。効果音は、シームレスなループと動的な個別の音量調整をサポートする必要があります。 Androidアプリのライフサイクルを適切にサポートする必要があります。
SoundPool
のどこかに1MBの制限があると聞きましたが、これはおそらく個々のサウンドエフェクトには許容できますが、すべてのバッファ/サウンドには許容されません。誰かが制限が何にあるかを正確に教えてもらえますか?
最後に、CPUの負荷が低く、バックグラウンドミュージックも圧縮形式で再生できる必要があります。これにはMediaPlayer
が理想的だと思います。別のAPIと並行して使用できますか?
MediaPlayer
を埋めるためにSoundPool
を使用している人がいることは知っています。しかし、必要な機能をサポートしていますか?
私が見逃した他のオーディオAPIはありますか?
この問題に関する最近のフィードバックを追加するだけです。キープレスサウンドのユーザーベースがかなり大きいアプリで、しばらくの間SoundPoolを使用していました。ユースケース:
setRate
を全範囲で使用します[0.5f-2.0f]
私は今、2つの主要なデバイス固有の問題を経験しており、損失を減らしてSoundPoolから切り替えることにしました
rate > 1.0f
でsetRate
を使用すると、SoundPoolがアプリが終了するまで(そしてプロセス中に大量のバッテリーを燃やして)例外をスローし始めることがわかりました。TL; DR; SoundPoolをデバッグすることの危険性/面倒の価値はないと思う
OGGファイルを使用すると、SoundPoolで問題ありません。 Androidであるのは、マルチプラットフォームの獣の性質です。プログラマーがどんなに熱心に努力しても、すべての重要なプログラムで動作しないハードウェア構成が存在します。
これが大規模で十分な資金のあるプロジェクトである場合は、テストのために各主要電話の資金を追加します。実際には、プログラマがパフォーマンスを調べて推測しようとするよりもはるかに安価です。
ごめんなさい。これはあなたが探していた答えではないようです。幸運を!
免責事項:MediaPlayerの使用経験はわずかですが、言及した他のAPIの使用経験はありません。以下の情報は、DOCで読んだ内容とGoogle検索で読んだ内容に基づいています。
MediaPlayerは(バックグラウンドミュージック用に)他のオーディオAPIとともに使用できます。MediaPlayerは独自のスレッドで自動的に実行されるためですが、CPU負荷が高いと思われます。しかし、私はあまりよく分からない。
JetPlayerもあります http://developer.Android.com/reference/Android/media/JetPlayer.html これは効果的に使用するには多くの作業のようですが、バックグラウンドミュージックを再生すると非常にうまく機能します、ゲームの必要に応じて他のサウンドを再生します。私がDOCを読んだところから、MIDIファイル(と思いますか?)が必要です。トラックをミュートおよびミュート解除して、思い通りに機能させることができます。
AudioTrackは、実行時にサウンドの周波数を変更することでサウンドを編集でき、SoundPoolでも同じことができるため、AudioTrackが好きです。
ただし、AudioTrackがブロックされているため、2つのサウンドを再生するには2つのスレッドが必要になるため、AudioTrackはうまく機能しないようです。
SoundPoolでは、16個のサウンドがあるので、各スレッドに1つのSoundPoolを含む2つのスレッドを取り、各SoundPoolに8つのサウンドを適用すると考えています。 SoundPoolを使用したことすらなかったので、私は本当に知りません。
繰り返しになりますが、私の情報は経験に基づいているのではなく、読んだ内容から得られる情報に基づいているため、完全にまたはわずかに間違っているかもしれません。
また、SoundPoolのバグについては、まだ調査していないので、何も知りません。