
Сообщение от
Pyhesty
Как это кодируется в midi? и как в вашем плеере? То есть длительность звучания ноты? =)
Вот попробую объяснить на примере:
Код:
123 On ch=1 n=48 v=127
123 Pb ch=1 v=8192
129 Off ch=1 n=48 v=0
В кадре 123 получаем команду включить ноту с номером 48 (130,81 Гц). Затем следующая команда выставляет pitch 8192, то есть смещение 0 относительно частоты ноты. Через шесть кадров приходит команда выключить данный канал.
Для условного плеера это превратится в следующие команды:
Код:
123 - послать в канал 1 значение 13590 (константа для частоты 130,81 Гц)
129 - выключить канал 1
Другой пример:
Код:
235 On ch=1 n=53 v=127
235 Pb ch=1 v=8192
240 Pb ch=1 v=9540
241 Off ch=1 n=53 v=0
В кадре 235 получаем команду включить ноту с номером 53 (174,61 Гц). Затем следует смещение равное нулю как и в предыдущем примере. Через пять кадров получаем новую команду изменить pitch bend. Берём частоту 174,61 умножаем на значение pitch bend (9540) и делим на 8192 (174,61*9540/8192=203,34). Частоту ноты 174,61 делим на 2 и умножаем на 2 в степени значения pitch bend делённое на 8192 (174,61/2 * 2^(9540/8192) = 195,71). На следующем кадре приходит команда выключить канал.
Для условного плеера это превратится в следующие команды:
Код:
235 - послать в канал 1 значение 10181 (константа для частоты 174,61 Гц)
240 - послать в канал 1 значение 8742 (константа для частоты 203,34 Гц)
240 - послать в канал 1 значение 9084 (константа для частоты 195,71 Гц)
241 - выключить канал 1
Таким образом в обоих примерах ноты звучат по шесть кадров, но во втором случае в последнем кадре чуток приподняли частоту.
- - - Добавлено - - -

Сообщение от
Pyhesty
Если вы не против, то возму некоторые кусочки кода вашего плеера в свои поделки =)
Это всегда пожалуйста - используйте наздоровье = ))
- - - Добавлено - - -

Сообщение от
Pyhesty
Ещё такой вопрос, а есть ли программы, которые преобразуют MIDI в удобный текстовый формат с сообщениями? просто ну уж очень не хочется самому
в ручную сырой MIDI разбирать =)))
Если что-то посоветуете, буду очень признателен =)
Спасибо!
Есть онлайн конвертер миди-файлов в текст Binary MIDI file to text conversion. Я им как раз и пользуюсь.
- - - Добавлено - - -

Сообщение от
Pyhesty
Я так понимаю, что сигнал длится долго, более 10 линий кадровой синхронизации и в принципе его сложно проморгать, а вопрос был в том, можно ли успеть
в ожидании этого импульса что-то посчитать? например, складывать 32битное число и класть в память (для оценки запаса производительности между кадрами, например). Мне так кажется, что за 600мкс, можно успеть считать из памяти и положить в память число ) проверю)
Если кадровая 50 Гц, то у нас в целом не 600 мкс, а все 20000 (20 мс). Отловили импульс и почти всё это время можно складывать, музыку выводить, отрисовывать на экране и прочее. Главное закончить чуть раньше и пойти по-новой "ловить" импульс.
Или мы о разном?