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工作?

setVolumeMediaPlayer如果处于错误状态,则将失败。请进行设置On<Event>Listeners,以便您可以真正了解以前播放MediaPlayer的 s 发生了什么。特别是,您可能对实现OnInfoListenerOnPreparedListener.

还有,怎么streamVolume修改?您可能在某处有竞争条件,并且该代码可能会streamVolume抢先设置。请检查所有正在修改的代码streamVolume

于 2012-11-23T16:41:26.557 回答