Tic*_*ink 3 time android clock
我正在尝试编写一个能够与用户输入同步播放 MIDI 文件的音乐应用程序。我已经创建了自定义视图、播放声音和读取 MIDI 数据。我在视图的 onDraw() 方法中运行 MIDI 数据的回放,以便我可以将用户输入应用于它。音符数据存储为一组音符音高和播放时间,以毫秒为单位。
我的测试数据每 500 毫秒(半秒)播放一个不同音高的音符。我在每个音符的时间间隔旁边记录 currentThreadTimeMillis(),正如我所期望的那样。每 500 个小节,播放一个音符。然而,这个以毫秒为单位的计数大约是实际速度的一半,需要一秒钟来计算 500 毫秒!我在 Galaxy Ace 上运行,所以这不是慢速模拟器的问题。
SystemClock.currentThreadTimeMillis() 为什么要花两秒钟的时间来计算 1000 毫秒?
public void onDraw(Canvas canvas) {
// TODO : Draw notes
canvas.drawColor(Color.BLACK);
canvas.drawBitmap(aNote.img, aNote.x, aNote.y, null);
if (ready>0){
elapsed_time = SystemClock.currentThreadTimeMillis() - start_time;
midi_note_data = MIDI.track_data.get(current_note);
if (midi_note_data.start_time <= elapsed_time){
current_note++;
pitch = midi_note_data.pitch;
Log.d("MUSIC", "Note time " + midi_note_data.start_time + " ThreadTime "+ elapsed_time);
sounds.play(tone, 1.0f, 1.0f, 0, 0, notes[pitch]);
}
if (current_note > MIDI.track_data.size()-1){
ready = -2;
}
}else if (ready == 0){
start_time = SystemClock.currentThreadTimeMillis();
Log.d("MUSIC", "Start time "+start_time);
ready = 1;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3400 次 |
| 最近记录: |