我正在制作一个带有我想要循环播放的声音的应用程序。
问题在于,每次使用 mediaPlayer.setLooping(true); 播放音频时,音频都会有一种淡入和淡出的现象;它们使循环听起来非常糟糕,因为当它结束和再次开始时你听得非常清楚。
我希望能够从特定的一秒播放到另一秒,例如能够从第二个 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)
的方法,它将在 start() 方法之前寻找 mediaPlayer
位置
private void startPosition(int initialTime){
mMediaPlayer.seekTo(initialTime); //time in millisecond, e.g 4sec = 4000
}
在mMediaPlayer.start()
方法之前调用此方法。
现在创建一个将无限运行的线程,并在达到上限时将您的媒体播放器位置返回到初始位置。
编辑
将您的 playAudio() 方法替换为以下内容,并将 upperTimerLimit
更改为特定值,例如 14000(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();
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();
}
Create the thread right after
mMediaPlayer.start()
There is no need ofmMediaPlayer.setLooping(true);
in your playAudio() method.
希望这会起作用。
关于java - 如何将音频从一秒循环到另一秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57926607/