В самой первой версии плеер умел только 64 ноты из миди-диапазона от 0 до 127. Этого поначалу было вполне достаточно - кастельвании использовали в среднем 35-40 нот.
Затем я освоил pitch_bend, который может быть от -8192 до +8191 к основной ноте. Это минус\плюс октава, то есть -12 от ноты если значение pitch_bend = 0 и +12 от ноты, если pitch_bend = 16383. Я приводил примеры из текста миди - там после включения каждой ноты указывается с каким смещением от основной частоты она играет. Ну вот если посчитать эти смещения как отдельные ноты, то они и будут дополнительными. Тогда я расширил значение до 256 - кастельвании с утками зазвучали лучше, появились эти самые ууииии-ууиии, уаауу-уааууу, ну и тд. А когда стал конвертировать ренегата и робокопа, оказалось что им 256 нот уже мало. Пришлось делить 16384 значения pitch_bend, что приводило к потере некоторых частот.
Для эксперимента я создал три отдельные таблицы нот для каждого канала. Получается (в теории) можно играть независимо 768 разных частот. На практике это не так - многие каналы пересекаются. Но всё равно это позволило расширить диапазон, не вылезая при этом из значения байта (256).
- - - Добавлено - - -
Вот пример из робокопа:
В начале включается нота 104 (3322,44 КГц), но тут же её частота понижается (v=7839) на 8192-7839=353 от изначальной (это примерно на четверть тона ниже). А дальше её частота вообще скачет вниз в паре мест до нуля - это уже равно ноте 104-12=92 (1661,22 КГц). Ну и тд и тп. Соответственно между существующими миди-нотами (0..127) у меня появляются дополнительные (заранее неизвестно сколько их будет).Код:79 On ch=1 n=104 v=127 79 Pb ch=1 v=7839 79 Par ch=1 c=11 v=46 84 Pb ch=1 v=7163 91 Pb ch=1 v=4526 98 Pb ch=1 v=2371 105 Pb ch=1 v=7163 112 Pb ch=1 v=4526 119 Pb ch=1 v=2371 126 Pb ch=1 v=1126 133 Pb ch=1 v=4526 140 Pb ch=1 v=2371 147 Pb ch=1 v=1126 154 Pb ch=1 v=0 161 Pb ch=1 v=2371 168 Pb ch=1 v=0 175 Off ch=1 n=104 v=0




Ответить с цитированием