77

私は、AndroidSoundPoolを、汎用ゲーム開発ライブラリに効果音を実装するメカニズムとして見ていました。それは理想的なようでした。

しかし、少し調べてみると、にはあらゆる 種類 バグがあることがわかっていSoundPoolます。のバグはSoundPoolまだ関連していますか?

私はライブラリを開発しているので、バグはライブラリのバグにSoundPoolなり、ユーザーをそこから隔離したいと思います。

だから私の質問は基本的に:オーディオにどのAPIを使うべきですか?

AudioTrack自分のミキサーを使用して作成することは問題外ではありません。しかし、明らかにそれを避けることが望ましいでしょう。そして、私にデコードを提供するAPIはありますか?

適度な数の効果音(少なくとも16)を同時に再生でき、さらにオープンである必要があります。サウンドは低レイテンシーで再生を開始する必要があります。WAVファイルをサポートする必要があります(MP3 / Oggは重要ではありません)。効果音は、シームレスなループと動的な個別の音量調整をサポートする必要があります。Androidアプリのライフサイクルを適切にサポートする必要があります。

どこかに1MBの制限があると聞きましたSoundPool。これは、個々のサウンドエフェクトごとにおそらく許容できますが、すべてのバッファ/サウンドに対しては許容できません。誰かが制限が何であるかを正確に教えてもらえますか?

最後に、CPU負荷が低く、圧縮形式でバックグラウンドミュージックも再生できる必要があります。MediaPlayerこれには理想的だと思います。別のAPIと並行して使用できますか?

私は何人かの人々がのMediaPlayerために記入するために使用していることを知っていSoundPoolます。しかし、それは私が必要とする機能をサポートしていますか?

私が見逃した他のオーディオAPIはありますか?

4

3 に答える 3

16

この問題に関する最近のフィードバックを追加するだけです。私はしばらくの間、キーを押す音のユーザーベースがかなり大きいアプリでSoundPoolを使用しています。私たちのユースケース:

  • すぐにプレイする必要があります
  • 最大3つ以上のサウンドを並行して
  • 私たちはsetRateそれの全範囲にわたって利用します[0.5f-2.0f]

私は今、2つの主要なデバイス固有の問題を経験し、損失を減らしてSoundPoolから切り替えることにしました。

  • 多数の4.4LGデバイス(主にLG G2 / G3ライン)で、SoundPoolの実装でネイティブクラッシュが発生していました。これは(最終的には)アップデートで修正されましたが、アップグレードされていないデバイスを使用しているユーザーはまだたくさんいます
  • 他の人が報告しているように、SonyXperiaデバイスには現在SoundPoolに関するあらゆる種類の問題があります。私の場合、SoundPoolを使用setRateして、アプリが終了するまで(そしてその過程で大量のバッテリーを使い果たすまで)例外をスローし始めると、私は発見しました。rate > 1.0f

TL; DR; SoundPoolをデバッグすることの危険性/手間をかける価値はもうないと思います

于 2015-01-27T19:59:08.063 に答える
9

OGGファイルに固執すれば、SoundPoolで問題なく動作します。プログラマーがどれほど熱心に試みても、すべての重要なプログラムで機能しないハードウェア構成が存在するのは、Androidであるマルチプラットフォームの獣の性質です。

これが大規模で資金の豊富なプロジェクトである場合は、テスト用に各主要電話の1つを資金に追加します。実際には、プログラマーが彼らのパフォーマンスを調査して推測するのに費やす時間よりもはるかに安価です。

ごめん。これはあなたが探していた答えではないようです。幸運を!

于 2011-06-28T16:17:06.533 に答える
3

免責事項:MediaPlayerの使用経験はわずかですが、言及している他のAPIの使用経験はありません。以下の情報は、DOCで読んだ内容とGoogle検索で読んだ内容に基づいています。

MediaPlayerは独自のスレッドで自動的に実行されるため、他のオーディオAPIで(バックグラウンドミュージック用に)mediaplayerを使用できますが、CPUの負荷が高く、圧縮されたビットがあまり必要ないと思います。でもよくわかりません。

JetPlayer http://developer.android.com/reference/android/media/JetPlayer.htmlもあります。これは、効果的に使用するには多くの作業のように見えますが、バックグラウンドミュージックを再生し、必要に応じて他のサウンドを再生すると非常にうまく機能します。ゲームで。私がDOCを読んだところ、MIDIファイルが必要で(私は思いますか?)、トラックをミュートおよびミュート解除して、希望どおりに機能させることができます。

AudioTrackが好きなのは、サウンドの周波数を変更することで実行時にサウンドを編集できるためです。SoundPoolでも同じことができます。

あなたの状況では、AudioTrackがブロックされているため、2つのサウンドを再生するには2つのスレッドが必要になるため、AudioTrackはうまく機能しないようです(私はかなり確信しています)。

そして、SoundPoolを使用すると、16のサウンドがあるので、各スレッドに1つのSoundPoolを含む2つのスレッドを取得し、各SoundPoolに8つのサウンドを適用すると思います。SoundPoolを使ったことがないので、よくわかりません。

繰り返しになりますが、私の情報は経験に基づくものではなく、私が読んだものから何が表示されるかだけなので、私は完全に、またはわずかに間違っているか、知っている人がいるかもしれません。

また、SoundPoolのバグについては調査していないため、実際には何も知りません。

于 2011-08-18T23:16:54.860 に答える