アプリでオーディオ クリップを再生するためにSoundPoolを使用しています。すべて問題ありませんが、クリップの再生がいつ終了したかを知る必要があります。
現時点では、MediaPlayerインスタンスを使用して各クリップの長さを取得することで、アプリで追跡しています。それは問題なく動作しますが、期間を取得するためだけに各ファイルを 2 回ロードするのは無駄に思えます。ファイルの長さ( AssetFileDescriptorから入手可能)を知っていれば、自分で持続時間を大まかに計算できますが、サンプルレートとチャンネル数を知る必要があります。
この問題に対する解決策として、次の 2 つが考えられます。
- クリップの再生がいつ終了したかを把握する (SoundClip ではできないようです)。
- オーディオ ファイルのヘッダーだけをロードし、サンプル レート/チャネル数 (理想的には、正確なデュレーションを取得するためのサンプル数) を提供できるクラスを用意します。
助言がありますか?
ありがとう、マックス
私が現在使用しているコード(正常に動作しますが、目的にはかなり重いです):
String[] fileNames = ...
MediaPlayer mp = new MediaPlayer();
for (String fileName : fileNames) {
AssetFileDescriptor d = context.getAssets().openFd(fileName);
mp.reset();
mp.setDataSource(d.getFileDescriptor(), d.getStartOffset(), d.getLength());
mp.prepare();
int duration = mp.getDuration();
// ...
}
ちなみに、この質問はすでに尋ねられていますが、回答がありません。