我制作了一个小应用程序,用于使用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建议检查一下。
答案 0 :(得分:0)
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包装器。您可以轻松使用它。
using FFMPEG with silencedetect to remove audio silence,您可以通过导航找到相关的FFmpeg命令。
在包装程序中,不需要ffmpeg部分。您需要从-y替换它。导航到该包装器时,您可以获得这些详细信息
答案 1 :(得分:0)
您的歌曲在开始时有一个静默的暂停;)
如@Lucefer所述,由于音频堆栈的实现,Android平台有一些small unavoidable latency。或者,至少在几年前,还不确定当前的状况。无论如何,该延迟通常太小(〜10ms),无法在音频文件的开头注意到。它与模拟乐器等的应用程序的响应时间有关。