当使用MediaPlayer时,我注意到每当我的手机卡住时,MediaPlayer就会出现故障,然后继续播放它所闪烁的音频中的位置。
这对我的实现很不好,因为我希望在特定时间播放音频
如果我有1000毫秒长的歌,我想要的是能够设置MediaPlayer在特定时间开始播放 t ,然后在 t + 1000 。
这意味着我实际上需要两件事:
1)在特定时间以非常小的延迟启动MediaPlayer
2)使MediaPlayer毛刺忽略他们所拍摄的音频并继续播放以便按时完成歌曲。
函数的延迟对我来说非常重要,我需要在应该播放的时候准确地播放音频(〜)。
谢谢!
答案 0 :(得分:0)
您可能需要使用可能mp.getDuration();
和/或mp.getCurrentPosition();
虽然无法确切地知道您的意思"我需要准确播放音频(〜 )当时应该播放。"
这样的事情应该让你开始:
int a = (mp.getCurrentPosition() + b);
答案 1 :(得分:0)
谢谢Mike的回答。但不幸的是,这对我没有帮助。
假设我要求MediaPlayer在00:00开始播放长度为3:45的歌曲。
在01:00我开始使用手机的资源,由于使用频繁我电话故障使MediaPlayer暂停2秒钟。
时间:
MediaPlayer
提供了高级API。AudioTrack
课程应该为我提供我需要的东西:
//Creating a new audio track
AudioTrack audioTrack = new AudioTrack(...)
//Get start time
long start = System.currentTimeMillis();
// loop until finished
for (...) {
// Get time in song
long now = System.currentTimeMillis();
long nowInSong = now - start;
// get a buffer from the song at time nowInSong with a length of 1 second
byte[] b = getAudioBuffer(nowInSong);
// play 1 second of music
audioTrack.write(b, 0, b.length);
// remove any unplayed data
audioTrack.flush();
}
现在,如果我出现故障,我只会出现故障1秒,然后我会通过在正确的时间播放正确的音频来纠正自己!
注意强>
我没有测试过这段代码,但它似乎是正确的方法。如果它真的有用,我会再次更新这篇文章。
P.S。在MediaPlayer
寻找是:
一个沉重的操作肯定会延迟我的音乐(每毫秒计算一次)
2.不是线程安全的,不能从多个线程使用(寻找,启动等......)