为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

隔江千里 2023-07-28 16:19:35
我正在制作一个带有我想要循环播放的声音的应用程序。问题是音频有一种淡入和淡出的效果,每次使用 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);            }        });
查看完整描述

1 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

创建一个调用的方法,该方法将在 start() 方法之前startPosition(int initialTime)寻找位置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();

}

在 playAudio() 方法中mMediaPlayer.start() 不需要立即创建线程。mMediaPlayer.setLooping(true);


希望这会起作用。


查看完整回答
反对 回复 2023-07-28
  • 1 回答
  • 0 关注
  • 108 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信