web-dev-qa-db-ja.com

AudioTrack、SoundPool、またはMediaPlayerどちらを使用すればよいですか?

5〜30秒など、再生時間が異なる複数のオーディオファイルを再生する必要があります。また、右/左チャンネルの音量を個別に設定し、リバーブやディストーションなどのエフェクトを適用したい。では、どのAPIを使用すればよいですか?

また、AudioTrack APIであまり多くのドキュメントを見つけることができません。例がどこにあるか知っていますか?どうも。

28
Fede

サウンドプールは実際にはオーディオミキサーです。短いクリップは、oggまたはmp3としてエンコードされているか、圧縮されていないかに関係なく再生できます。サウンドプールは常に圧縮されていない状態でメモリに保存します。制限は1 MBであることを知っておく必要があります。クリップがメモリ内で大きすぎる場合、サウンドプールは無音になり、「AudioFlingerはトラックを作成できませんでした。ステータス:-12」のメディアプレーヤーがストリームを再生し、リアルタイムでデコードします。したがって、はるかに長いクリップを再生できますが、そのためのプロセッサ能力が必要です。

メディアプレーヤーはバックグラウンドミュージックに適していますが、サウンドプールは短いオーディオエフェクト(クリック、爆発、サウンドループ)に適しています。さらに、サウンドプールは同時により多くのクリップを再生でき、音量と速度を制御できます。また、ループを再生できます。

注:クリップが完全にロードおよびデコードされていない場合、サウンドプールから音楽を再生することはできません。そのため、OnLoadCompleteListener(Android 10以降)を使用して確認する必要があります。デコードされる前にサウンドを再生しようとすると、サウンドプールがミュートされます。

メディアプレーヤーはこれらの問題に悩まされることはありません。

52
Elvis Popovic

他の回答が示唆したことに加えて、MediaPlayerとSoundPoolの違いの1つは、MediaPlayerでは、既に再生されているときにサウンドクリップを再生できないことです(この機能は特にゲームで役立ちます)。 MediaPlayerは、クリップをもう一度再生する前に完全に終了する必要があります。情報は公式サイトで提供されていると思います。

ただし、SoundPoolにはそのような問題はなく、SoundPoolが呼び出されたときにオーディオが再生されることにも気付きました(MediaPlayerを使用したときに、わずかな遅延に気づいたことがあります)。

それが、ゲームなどの短いサウンドにはSoundPoolが優れていると人々が言う理由の一部です。お役に立てれば:)

9
Harsha

そのような期間はMediaPlayerをお勧めします。

詳細については、こちらをご覧ください: Android SoundPoolはどれほど悪いのですか?

4
pawegio

MediaPlayerは、マルチチャンネルの音量設定をサポートしていません。

ここでは、SoundPoolだけがニーズに合っていると思います。

編集:うん、あなたはSoundPoolが必要です、これを読んでください: http://www.wiseandroid.com/post/2010/07/13/Intro-to-the-three-Android-Audio-APIs.aspx

2
Goot