我已经将MIDI文件解析为一组音符(键,力度,时间,还有MIDI文件的速度及其更改事件)。我需要以GUI(LCL)应用程序的异步方式播放它们(我无法使用MCISendString
,因为我需要处理这些消息)。问题是,在MIDI中通常有成千上万个音符。您认为什么是播放它们的最佳方法?
我有一些想法,但是它们很慢而且不切实际:
BeginThread
或Sleep
)并播放音符(线程有限制,并且确实很不稳定)的函数一次调用一堆Delay
。currentNoteTime-previousNoteTime
休眠/延迟并播放音符。可能会变慢,尤其是在尝试对所有内容进行排序时。我正在使用Lazarus(对象Pascal),但是如果需要,我也可以利用Delphi代码。谢谢您的时间。
我已经将MIDI文件解析为一组音符(键,力度,时间,还有MIDI文件的速度及其更改事件)。我需要将它们回放为GUI(LCL)应用的异步方式(我不能使用...
所有线程方法(睡眠,延迟等)在Windows上都会失败,因为您获得的精度不会超过16毫秒(在最佳情况下),这将导致您的数据无法正确播放,并且延迟较大。这是已知问题,您可以在网上搜索。