繁体   English   中英

为何MediaPlayer延迟播放mp3音频?

[英]android - Why MediaPlayer delayes in playing mp3 audio?

我制作了一个小应用程序,使用MediaPlayer在android中练习音频播放,该应用程序很好用,但单击播放按钮后有1秒的小延迟,这很明显,我注意到只有在启动音频文件时才会出现这种情况,将其暂停立即恢复播放,没有延迟。我到处搜寻,发现有人建议使用SoundPool而不是MediaPlayer,但是在我的应用播放完整歌曲时,建议使用SoundPool播放简短的音频剪辑,这是什么原因造成的? 有没有解决或解决此问题的方法?

这是我的代码:

私有MediaPlayer mMediaPlayer;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mMediaPlayer = MediaPlayer.create(this,R.raw.this_is_america);

    Button btnPlay = findViewById(R.id.btnPlay);
    Button btnPause = findViewById(R.id.btnPause);
    Button btnStop = findViewById(R.id.btnStop);
    btnPlay.setOnClickListener(this);
    btnPause.setOnClickListener(this);
    btnStop.setOnClickListener(this);
}

@Override
public void onClick(View v) {

    switch (v.getId()) {

        case R.id.btnPlay:

            Toast.makeText(getApplicationContext(), "Playing song",
                    Toast.LENGTH_SHORT).show();


           mMediaPlayer.start();

            break;

        case R.id.btnPause:

            Toast.makeText(getApplicationContext(), "Pausing song",
                    Toast.LENGTH_SHORT).show();

            mMediaPlayer.pause();
            break;

        case R.id.btnStop:

            Toast.makeText(getApplicationContext(), "Song stopped",
                    Toast.LENGTH_SHORT).show();

          mMediaPlayer.reset();
          mMediaPlayer = MediaPlayer.create(this,R.raw.this_is_america);
            break;
    }

}

更新:原来是mp3音频文件在开始时有静默暂停,尝试了另一首歌曲,并且工作正常,没有明显的延迟,谢谢greeble31建议检查一下。

Android操作系统中存在音频延迟问题。 录音和播放音频时会延迟几毫秒。 您可以通过以下URL来了解更多信息。 而此延迟与设备类型有关。

https://developer.android.com/ndk/guides/audio/audio-latency https://source.android.com/devices/audio/latency/measurements

您可以使用本机工具箱或本机程序(基于C,C ++ ndk)来最小化此延迟。 但是您不能将其减少到0秒。 仅最大程度地减少延迟。

https://superpowered.com/superpowered-android-media-server 您可以从中获得支持,但据我所知您需要为此付费。 我没有尝试。 因此,我不知道它减少了多少延迟。


如果要从mp3中删除无声部分。 您可以使用ffmpeg包装器。 转到https://github.com/WritingMinds/ffmpeg-android-java链接,那里有适用于Android的ffmpeg包装器。 您可以轻松使用它。

将FFMPEG与silencedetect一起使用以消除音频静默 ,可以通过导航到它找到相关的FFmpeg命令。

在包装中,您不需要ffmpeg部分。 您需要从-y替换它。 导航到该包装器时可以获得这些详细信息

您的歌曲在开始时有一个静默的暂停;)

如@Lucefer所述,由于音频堆栈的实现,Android平台具有一些不可避免的小延迟 或者,至少在几年前,还不确定当前的状况。 无论如何,该延迟通常太小(〜10ms),无法在音频文件的开头注意到。 它与模拟乐器等的应用程序的响应时间有关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM