Я одного не понимаю в MusicDeviceMIDIEvent
. В каждом отдельном примере, который я когда-либо видел (искал примеры Github и Apple), он всегда использовался из основного потока. Теперь, чтобы использовать параметр смещения образца, в документации указано:
inOffsetSampleFrame: если вы планируете событие MIDI из потока рендеринга аудиоустройства, то вы можете указать смещение сэмпла, которое аудиоустройство может применить при применении этого события в его следующем рендере аудиоустройства. Это позволяет вам запланировать для семпла время, когда применяется MIDI-команда, и это особенно важно при запуске новых нот. Если вы не планируете в потоке рендеринга аудиоустройства, вам следует установить это значение на 0
Тем не менее, даже в самом простом случае, когда у вас есть только аудиоблок сэмплера и модуль io, как вы можете запланировать MIDI-события из потока рендеринга аудиоустройства, поскольку сэмплер не допускает обратный вызов рендеринга, и даже если бы он (или если вы используете обратный вызов io только для подключения), это будет выглядеть хакерским, поскольку обратный вызов рендеринга не предназначен для планирования MIDI-событий?
Как правильно вызвать эту функцию из потока рендеринга аудиоустройства?