我让计数器正常工作(感谢您的帮助)我使用MediaPlayer添加声音,问题是加载计数器有延迟,因为声音加载在同一个类上。
有没有办法使用主类预加载声音,那么,当调用计数器时,数字是缓冲的并且可以从这个类中调用?
应用程序有一个启动画面,唯一的目的是加载其他类所需的任何内容以避免延迟。
如果无法从其他课程加载声音,是否可以在播放时单独加载?
这就是我到目前为止......
final boolean sound = timer_sound.getBoolean("timer_sound", true);
final MediaPlayer number01 = MediaPlayer.create(this, R.raw.number_1);
final MediaPlayer number02 = MediaPlayer.create(this, R.raw.number_2);
final MediaPlayer number03 = MediaPlayer.create(this, R.raw.number_3);
final MediaPlayer number04 = MediaPlayer.create(this, R.raw.number_4);
final MediaPlayer number05 = MediaPlayer.create(this, R.raw.number_5);
final MediaPlayer number06 = MediaPlayer.create(this, R.raw.number_6);
final MediaPlayer number07 = MediaPlayer.create(this, R.raw.number_7);
final MediaPlayer number08 = MediaPlayer.create(this, R.raw.number_8);
final MediaPlayer number09 = MediaPlayer.create(this, R.raw.number_9);
final MediaPlayer number10 = MediaPlayer.create(this, R.raw.number_10);
final MediaPlayer number15 = MediaPlayer.create(this, R.raw.number_15);
final MediaPlayer number20 = MediaPlayer.create(this, R.raw.number_20);
lastSeconds = (TextView) findViewById(R.id.lastminuteseconds);
lastMinute = new CountDownTimer(60 * 1000, 1000) {
public void onTick(long secondsToStart) {
int elapseTime = (int) (secondsToStart / 1000);
if (sound == true){
switch(elapseTime) {
case 1: number01.start();break;
case 2: number02.start();break;
case 3: number03.start();break;
case 4: number04.start();break;
case 5: number05.start();break;
case 6: number06.start();break;
case 7: number07.start();break;
case 8: number08.start();break;
case 9: number09.start();break;
case 10: number10.start();break;
case 15: number15.start();break;
case 20: number20.start();break;
}
}
这工作得很好,问题是加载文件有2秒的延迟,我想添加更多(50,40,30)。
答案 0 :(得分:0)
你的做法似乎非常浪费。您应该加载第一个声音,并在播放时触发下一个声音的加载,因此在任何时候您只缓存RAM中的两个声音(当前和下一个)。
因此,您只预加载第一个声音,然后在ontick()中通过run()播放当前声音时触发下一个声音的加载,并将声音对象交换为下一个ontick()。
答案 1 :(得分:0)
我正在慢慢学习,我已经想到了这一点。
我无法相信这样做有多简单....
不要输入所有代码,这里是完成的更改;
首先,我停止用开关加载声音,但是我使用了开关调用类......
if (sound == true){
switch(elapseTime) {
case 1: number01();break;
case 2: number02();break;
然后,我在调用类时加载声音;
public void number01(){
final MediaPlayer number01 = MediaPlayer.create(this, R.raw.number_1);
number01.start();
}
public void number02(){
final MediaPlayer number02 = MediaPlayer.create(this, R.raw.number_2);
number02.start();
}
现在,当调用开关并加载声音并播放它时。这样可以在加载应用程序时停止延迟。
我希望这有助于其他初学者,就像我一样,通过犯错并纠正错误来学习。