【发布时间】:2013-09-25 21:23:41
【问题描述】:
我有一个小应用程序,它基本上设置了一个计时器并播放2个一组的声音一个接一个。
我尝试了 2 个计时器,因为我希望两种声音每次都在同一时间开始。我给了应用程序 500 毫秒来设置两个计时器,然后才开始
Calendar cal = Calendar.getInstance();
Date start = new Date(cal.getTime().getTime() + 500);
timerTask1 = new TimerTask() { //1st timer
@Override
public void run() {
soundManager.playSound(1);
}
};
timer1 = new Timer();
timer1.schedule(timerTask1, start, 550);
timerTask2 = new TimerTask() { //2nd timer
@Override
public void run() {
soundManager.playSound(2);
}
};
timer2 = new Timer();
timer2.schedule(timerTask2, start, 550);
}
soundManager 是一个基于this tutorial 的SoundManager 对象。我所做的唯一更改是将可用流的数量从 20 个减少到 2 个,因为我同时只播放 2 个声音。
现在的问题。 在我的摩托罗拉 RAZR 或模拟器上播放速度不一样。该应用程序有时会变慢,使刹车时间比预期的要长。我不能让这种事发生。这里有什么问题?
我正在使用 OGG 格式的非常短的声音
编辑: 我做了一些研究。使用了2个方法。我正在测量声音发射之间的毫秒距离。刷新率为 500 毫秒。
- 第一个方法是 TimerTask - 这是一个很大的失败。它从 300 毫秒开始,然后不断增长,并在一段时间(2 分钟)后稳定在 497 毫秒,如果这样开始就好了。
- 第二个方法是在 AsyncTask 上进行 while 循环 - 它给了我 475 到 500ms 的输出,这比 TimerTask 好,但仍然不准确
最后没有一个方法播放得很顺利。总是有滞后
【问题讨论】:
-
首先,
TimerTask不能保证是实时的,所以我可以想象在每个声音之间的 50 毫秒内有什么东西会打断你的进程。其次,似乎是先调用soundManager.playSound(1);,然后再调用soundManager.playSound(2);will play sequentially。 -
请注意,这两种声音都是从不同的线程中播放的,所以我希望它们在完全相同的时间开始,因为它们的开始时间相同。那么计时器任务有什么等价物呢?
-
每个ogg文件的大小是多少
标签: android soundmanager2