我有一个扩展 Service 的类,我有一个 MediaPlayer 来管理我的应用程序的背景音乐。
MediaPlayer player = MediaPlayer.create(this, R.raw.background_music);
player.setLooping(true);
问题是它不能很好地“循环”:我的意思是,当 mp3 文件结束时,在重新开始之前会有一秒钟的沉默。但是,在 mp3 文件中,实际上,没有一秒钟的沉默。
我怎么解决这个问题?
我有一个扩展 Service 的类,我有一个 MediaPlayer 来管理我的应用程序的背景音乐。
MediaPlayer player = MediaPlayer.create(this, R.raw.background_music);
player.setLooping(true);
问题是它不能很好地“循环”:我的意思是,当 mp3 文件结束时,在重新开始之前会有一秒钟的沉默。但是,在 mp3 文件中,实际上,没有一秒钟的沉默。
我怎么解决这个问题?
你不能。这个错误已经存在很长时间了,但他们仍然没有修复它,而且看起来他们不会在不久的将来这样做!
您可以尝试使用 SoundPool 来播放您的音频文件(它可以很好地循环播放并且没有延迟,但可能不适合某些音频资源)。
这是某种实现(弃用删除和适当关闭资源留作家庭作业:))
SoundPool pool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
afd = getResources().openRawResourceFd(audioResource);
pool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
if (0 == status) {
soundPool.play(sampleId, 1f, 1f, 10, -1 /* looping parameter */, 1f);
}
}
});
pool.load(afd, 10);
afd.close();
从另一方面来说,如果 MediaPlayer 是必须的,你可能会研究方法setNextMediaPlayer。所以想法是为同一个文件初始化几个 MediaPlayer(真是一团糟)并以一种智能的方式设置它们。