【发布时间】:2020-05-28 09:56:17
【问题描述】:
我已将 MIDI 文件解析为一组音符(键、速度、时间,还有 MIDI 文件的速度及其变化事件)。我需要在 GUI (LCL) 应用程序中异步播放它们(我不能使用 MCISendString,因为我需要处理这些消息)。问题是,在 MIDI 中通常有数千个音符。您认为播放它们的最佳方式是什么?
我有一些想法,但它们速度慢且不切实际:
- 使用等待(
Sleep或Delay)指定时间量并播放音符的函数一次调用一堆BeginThreads(线程有限制,它真的很不稳定)。 - 对时间戳进行排序,然后通过单个线程运行它们,该线程将休眠/延迟
currentNoteTime-previousNoteTime并播放音符。可能会很慢,尤其是在尝试对所有内容进行排序时。 - 编写另一个应用程序作为后台进程并完成工作(不专业的 bodging)。
我正在使用 Lazarus (Object Pascal),但如果需要,我也可以使用 Delphi 代码。感谢您的宝贵时间。
【问题讨论】:
标签: delphi pascal midi lazarus