Я разобрал MIDI-файл на массив нот (тональность, скорость, время, а также темп MIDI-файла и его события изменения). Мне нужно воспроизвести их асинхронно из приложения GUI (LCL) (я не могу использовать MCISendString
, потому что мне нужно обрабатывать эти сообщения). Дело в том, что в MIDI обычно тысячи нот. Как вы думаете, как лучше всего их воспроизвести?
У меня есть несколько идей, но они медленные и непрактичные:
- Позвоните группе
BeginThread
s одновременно с функцией, которая ожидает (Sleep
или Delay
) в течение указанного времени и воспроизводит заметку (есть ограничение на потоки, и это действительно нестабильно). - Сортировка меток времени и затем прогоняя их через один поток, который будет засыпать / задерживать
currentNoteTime-previousNoteTime
и воспроизводить ноту. Может быть медленным, особенно при попытке все это отсортировать. - Напишите другое приложение, которое будет фоновым процессом, и выполните эту работу (непрофессиональный боджинг).
Я работаю с Lazarus (Object Pascal), но при необходимости я могу использовать и код Delphi. Спасибо за ваше время.