2011-02-26 41 views
0

我有一个android应用程序,我通过mediaplayer播放音乐和使用soundpool播放sfx。从我能找到的,mediaplayer没有任何回调让你知道当你点击歌曲\文件中的某些点时,只是一个回调结束时。如何玩音乐一次性sfx

完成此操作的最佳方法是什么?我应该开始一个线程,每隔一定数量的毫秒播放sfx?或者一段时间循环?由于

+0

如果你更多地解释'为什么'你这样做会有帮助。我的脑海里浮现出来 - 这是一段你想每隔10秒左右穿插一个'foghorn'sfx的'图表'音乐吗? :D – Squonk 2011-02-26 01:26:50

+0

基本上可以。我已经预先知道多少次(以毫秒为单位),我希望一次发挥。 – Kyle 2011-02-28 19:35:52

回答

0

我认为你可以得到你的音乐的时间lenght,然后用一个简单的计时器在某些点上(如5秒)解雇你的SFX:

new Handler().postDelayed(new Runnable() {   
@Override   
public void run() {    
//here call sfx 
}  
}, 5000); 
与倒计时定时器可以

而且定期检查一下,看看你是否想玩sfx:

new CountDownTimer(60000, 1000) {  

public void onTick(long millisUntilFinished) {   
    //call to my UI thread every one second  
}  
public void onFinish() {   
    //final call to my UI thread after 60 seconds  
} 
}.start(); 
+0

我试过countdowntimer方法,它基本上做我在找什么,只是它不是很准确。当它触发一次性拍摄时,它太晚了150毫秒左右。这可能是因为我的开发手机(mytouch 3g)的速度,或者只是需要执行一些代码。我担心的是,即使我调整了延迟时间,在具有不同硬件速度的手机上也会有所不同。 – Kyle 2011-02-28 19:38:52

+0

恐怕,我注意到在android上的所有音乐键盘程序上都存在延迟。现在我知道它是150ms!我听说在2.3版本中有一种更直接的方式可以更快地发出声音......我认为,如果你不使用2.3中的新方法,你可以调整这种延迟,并且它应该在所有手机上都能够非常准确地工作。您可以检测代码中的Android版本,并选择不同的方法。 – Lumis 2011-02-28 22:39:42