Java 如何将音频从一秒循环到另一秒

Java 如何将音频从一秒循环到另一秒,java,android,Java,Android,我正在用我想要循环的声音制作一个应用程序 问题是每次使用mediaPlayer播放时,音频都会有一种淡入淡出的现象;它们使循环听起来非常糟糕,因为当循环结束和再次开始时,你都能完美地听到它 我希望能够将这些音频从一秒播放到另一秒,例如能够从第二个00:00:04循环到第二个00:00:14,因此不会听到淡入和淡出 目前,我正在使用此代码播放音频。然后在按钮中,我打电话给你,你会看到下一个 public void playAudio(int audioId) { /

我正在用我想要循环的声音制作一个应用程序

问题是每次使用mediaPlayer播放时,音频都会有一种淡入淡出的现象;它们使循环听起来非常糟糕,因为当循环结束和再次开始时,你都能完美地听到它

我希望能够将这些音频从一秒播放到另一秒,例如能够从第二个00:00:04循环到第二个00:00:14,因此不会听到淡入和淡出

目前,我正在使用此代码播放音频。然后在按钮中,我打电话给你,你会看到下一个

    public void playAudio(int audioId)
    {
        // stop the previous playing audio
        if(mMediaPlayer != null && mMediaPlayer.isPlaying())
        {
            mMediaPlayer.stop();
            mMediaPlayer.release();
            mMediaPlayer = null;
        }

        mMediaPlayer = MediaPlayer.create(this, audioId);

        mMediaPlayer.start();
        mMediaPlayer.setLooping(true);

    }

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) { 

            playAudio(R.raw.sound1);

            }
        });

创建一个名为
startPosition(int initialTime)
的方法,该方法将查找
mediaPlayer
position before start()方法

mmediplayer.start()方法之前调用此方法

现在创建一个线程,它将无休止地运行,并在达到上限时将您的mediaplayer位置恢复到初始位置。 编辑 将playAudio()方法替换为以下方法,并将
upperTimerLimit
更改为特定值,例如14000(14秒)

在mmediplayer.start()之后创建线程 不需要
mMediaPlayer.setLooping(true)代码


希望这能起作用。

你能把线程代码写得更清楚些吗?提前感谢:)它工作得很好!非常感谢,你让我开心了:DIf成功了,然后接受答案,这样其他用户就会受益
private void startPosition(int initialTime){
    mMediaPlayer.seekTo(initialTime);    //time in millisecond, e.g 4sec = 4000
}
public void playAudio(int audioId)
{
    // stop the previous playing audio
    if(mMediaPlayer != null && mMediaPlayer.isPlaying())
    {
        mMediaPlayer.stop();
        mMediaPlayer.release();
        mMediaPlayer = null;
    }

    mMediaPlayer = MediaPlayer.create(this, audioId);

    mMediaPlayer.start();
    new Thread(new Runnable() { 
        public void run(){        
            while(true){
                if(mMediaPlayer.getCurrentPosition()-UpperTimeLimit >=0){ //UpperTimeLimit should be in milliseconds. UpperTimerLimit is the specific second after which player should start again the sound.
                    startPosition(initialTime);    //Call the startPosition(int initialTime)
                }
        }
    }).start();
}