1. ホーム
  2. android

Android SoundPoolはどれくらい悪いのか?どのような代替手段を使えばいいのか?

2023-09-12 21:36:53

質問

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

しかし、少し調べてみると、そこには すべて 種類 バグ SoundPool . のバグは SoundPool のバグはまだ関連していますか?

私はライブラリを開発しているため、バグがあっても SoundPool のバグは私のライブラリのバグになるので、私はユーザーをそこから隔離したいのです。

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

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

私は、妥当な数の同時効果音 (少なくとも 16 とします) を再生することができ、さらにオープンであることが必要です。音は低レイテンシーで再生を開始する必要があります。 WAV ファイルがサポートされている必要があります (MP3/Ogg は重要ではありません)。効果音は、シームレスなループとダイナミックで個別の音量調節をサポートする必要があります。Android アプリのライフサイクルが適切にサポートされる必要があります。

には 1MB の制限があると聞いたことがあります。 SoundPool これは、おそらく個々の効果音には許容されますが、すべてのバッファ/音には許容されません。どなたか、その制限について正確に教えていただけませんか?

最後に、私は、圧縮されたフォーマットで、低い CPU 負荷で、BGM も再生できるようにする必要があります。私は次のように仮定します。 MediaPlayer が理想的だと思います。他のAPIと並行して使用することは可能でしょうか?

何人かの人が MediaPlayer を埋めるために SoundPool . しかし、それは私が必要とする機能をサポートしているのでしょうか?

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

どのように解決するのですか?

この問題について、もう少し最近のフィードバックを追加します。かなり大きなユーザー ベースのアプリで、キーを押す音のために SoundPool をしばらくの間使用してきました。私たちの使用例です。

  • すぐに再生する必要がある
  • 最大3つ以上のサウンドを並列に再生可能
  • を利用します。 setRate の全範囲にわたって [0.5f-2.0f]

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

  • 多数の 4.4 LG デバイス (主に LG G2/G3 ライン) で、SoundPool の実装でネイティブ クラッシュが発生しました。これは (最終的には) アップデートで修正されましたが、まだ多くのユーザーがアップグレードされていないデバイスを使用しています。
  • Sony Xperia デバイスでは、現在、次のような SoundPool に関するさまざまな問題があります。 によって報告されています。 . 私の場合、Sony Xperia の端末で setRaterate > 1.0f を指定した場合、SoundPool はアプリが終了するまで例外を投げ続けます(そして、その過程で大量のバッテリーを消費します)。

TL;DR; SoundPool をデバッグする危険性や手間をかける価値があるとは、もはや思っていません。