0

私は現在、オーディオを再生する必要があるアプリに取り組んでいます。一連の.mp3を順番に再生するメソッドがあります。方法は次のとおりです。

/**
 * Plays a series of sounds in order without delay.
 * 
 * @param audioResourceIds
 *          An in-order array of the audio asset resources to play.
 * */
public void playQueuedPlaylist(int[] audioResourceIds)
{
    float lastPlayedSoundDuration;

    for(int i = 0; i<audioResourceIds.length; i++)
    {
        lastPlayedSoundDuration = playMedia(audioResourceIds[i], null);
        try
        {
            Thread.sleep((long)lastPlayedSoundDuration);
        }
        catch(Exception eh)
        {
            Log.v("BulacsAlmighty","Exception caught at playQueuedPlaylist()");
        }
    }
}

/**
 * Used to play voice overs
 * 
 * @param index
 *            id of the sound
 * @param listener
 *            on completion listener
 */

public int playMedia(int index, OnCompletionListener listener) 
{

    MediaPlayer mp = MediaPlayer.create(context, index);
    mp.setVolume(streamVolume, streamVolume);


    stopMedia(index); // Stops the sound if it still is playing.

    mp.start();

    return mp.getDuration();
}

問題は、音が鳴らないことがあるということです。そして、それらが再生されるとき、タイミングは正しく、順序は正しいですが、最後に再生されたオーディオリソースは、それ以前に再生された他のサウンドよりも大幅に低い音量で再生されます。

教えてください、どこが間違っていたのですか!?

4

2 に答える 2

0

なぜあなたは電話するのか興味があります

mp.setVolume(streamVolume、streamVolume);

まったく?本当に必要ですか?コードから音量を調整する必要がある理由については言及していません。

于 2012-11-24T00:01:11.590 に答える
0

そのトラックに関連付けられているを保存および解放していない場合、以前のトラックをどのように停止していますMediaPlayerか? どのように機能しstopMediaますか?

setVolumeがエラーMediaPlayer状態の場合は失敗します。前回再生した s が実際にどうなっているのかわかるように設定してください。特に、 と の実装に興味があるかもしれません。On<Event>ListenersMediaPlayerOnInfoListenerOnPreparedListener

また、どのようにstreamVolume変更されますか?どこかで競合状態が発生し、そのコードがstreamVolumeプリエンプティブに設定されている可能性があります。を変更しているすべてのコードを確認してくださいstreamVolume

于 2012-11-23T16:41:26.557 に答える