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

标签 java android

我正在制作一个带有我想要循环播放的声音的应用程序。

问题在于,每次使用 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 of mMediaPlayer.setLooping(true); in your playAudio() method.

希望这会起作用。

关于java - 如何将音频从一秒循环到另一秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57926607/

相关文章:

Java 源代码未显示(IntelliJ?)

Java Swing 背景图像重复和最大化窗口

java - 在 Android 中登录 Twitter

Java 接口(interface)作为方法的参数

java - 解析到对象 api 字段(如电子邮件、bNumber、iKindCd)会导致空值

java - 如何从 Websphere UserRegistry 获取用户详细信息

java - 双哈希java

android - SVG 路径到 Android 中的贝塞尔路径

java - Buildozer 不适用于 cygwin 下的 java

android - 如何在 ActionbarSherlock 中将按钮放在 Logo 的右侧