Android SoundPoolはどれくらい悪いのか?どのような代替手段を使えばいいのか?
質問
私は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 の端末で
setRate
とrate > 1.0f
を指定した場合、SoundPool はアプリが終了するまで例外を投げ続けます(そして、その過程で大量のバッテリーを消費します)。
TL;DR; SoundPool をデバッグする危険性や手間をかける価値があるとは、もはや思っていません。
関連
-
[解決済み] Androidのgravityとlayout_gravityの違いは何ですか?
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み] AndroidのListViewで画像を遅延ロードする方法
-
[解決済み] Androidで画面の大きさをピクセル単位で取得する方法
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み] プログラムでソフトキーボードを開く
-
[解決済み] ArrayList<MyCustomClass>をJSONArrayに変換する。
-
[解決済み] アンドロイドボタンセレクター
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] RecyclerView.Stateを使って、RecyclerViewのスクロール位置を保存するには?
-
[解決済み] Androidの連絡先リストを呼び出すには?
-
[解決済み] プログラム的に電話をかけるには?
-
[解決済み] HttpPostによる画像送信
-
[解決済み] Android Navigation Architecture Component - 現在表示されているフラグメントを取得する
-
[解決済み] Studio 3.4 をアップデートしたら、引数の leftShift() メソッドが見つかりませんでした。
-
[解決済み] AndroidでTextViewの下にアンダーラインを引くには
-
[解決済み] edittextのテキストがメールアドレスかどうかを確認するには?
-
[解決済み] Androidの環境設定。ユーザーが環境設定画面を使用していない場合、デフォルト値を読み込むにはどうすればよいですか?
-
[解決済み] Travis.yml ./gradlew : パーミッションが拒否されました。