2

録音したファイルを再生するためにサウンドプールを使用しています。サウンドプールの再生がいつ終了するかを知る方法があることを知りたいだけです。以下は私の作業コードです。

public void soundPool() {
    final float playbackSpeed = 1.5f;
    final SoundPool soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC,
            100);

    final int soundId = soundPool.load(audiofile.getAbsolutePath(), 1);
    AudioManager mgr = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    final float volume = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);

    soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
        @Override
        public void onLoadComplete(SoundPool arg0, int arg1, int arg2) {
            soundPool.play(soundId, volume, volume, 1, 0, playbackSpeed);
        }
    });

}
4

3 に答える 3

1

残念ながら、SoundPool がいつサンプルの再生を終了したかを伝えるためのリスナーは提供されていません。この機能が必要な場合は、MediaPlayer を使用してください。

ハックとして、オーディオ エディターからオーディオ ファイルの長さをミリ秒単位 (X) で取得し、アプリに再生を指示した後にタイマーを設定することができます。タイマーは、X ミリ秒後に 1 回起動するように設定されています。このようにして、サウンドの再生が終了したかどうかを大まかに把握できます。ただし、これは非常に信頼性の低い方法であり、解決できる場合は避ける必要があります。代わりに、MediaPlayer.OnCompletionListener() で MediaPlayer クラスを使用します。

于 2013-11-24T17:30:39.387 に答える