User Tag List

Страница 32 из 39 ПерваяПервая ... 282930313233343536 ... ПоследняяПоследняя
Показано с 311 по 320 из 443

Тема: Пишу шедевр для «Вектора 06Ц»

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    05.01.2009
    Адрес
    Харьков
    Сообщений
    157
    Спасибо Благодарностей отдано 
    23
    Спасибо Благодарностей получено 
    13
    Поблагодарили
    11 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от metamorpho Посмотреть сообщение
    как Pb повлияет на эту ноту ? Изменит высоту ноты в какую сторону ?
    Ответ - в спецификации MIDI. Параметр команды Pb - это 14-битное число от 0 до 16384.
    При конверсии:

    1. Это число нужно преобразовать в диапазон от -1 до 1. 8192 - это ноль, 16384 - это один, а 0 - это минус один. Всё, что между этими точками - вещественные числа в диапазоне от -1 до 1.
    2. Умножить на количество полутонов в диапазоне pitch bend (обычно +/- два полутона, т.е. умножаем на 2)
    3. Поделить на 12 (количество полутонов в октаве)
    4. Возвести двойку в степень числа, полученного на шаге 3
    5. Умножить базовую частоту ноты на результат шага 4

    Привожу английский оригинал на всякий случай:

    So, to manage the pitchbend data and use it to alter the pitch of a tone in a synthesizer we need to do the following steps.
    1. Combine the MSB and LSB to get a 14-bit value.
    2. Map that value (which will be in the range 0 to 16,383) to reside in the range -1 to 1.
    3. Multiply that by the number of semitones in the ± bend range.
    4. Divide that by 12 (the number of equal-tempered semitones in an octave) and use the result as the exponent of 2 to get the pitchbend factor (the value by which we will multiply the base frequency of the tone or the playback rate of the sample).

    A pitchbend value of 8,192 (MSB 64 and LSB 0) will mean 0 bend, producing a pitchbend factor of 2(0/12) which is 1; multiplying by that factor will cause no change in frequency. Using the example message from above, a pitchbend of 12,280 will be an upward bend of 4,088/8191=0.499. That is, 12,280 is 4,088 greater than 8,192, so it’s about 0.499 of the way from no bend (8,192) to maximum upward bend (16,383). Thus, if we assume a pitchbend range setting of ± 2 semitones, the amount of pitch bend would be about 0.998 semitones, so the frequency scaling factor will be 2(0.998/12), which is about 1.059. You would multiply that factor by the fundamental frequency of the tone being produced by your synthesizer to get the instantaneous frequency of the note.
    Последний раз редактировалось x-code; 13.08.2020 в 17:40.

    Эти 2 пользователя(ей) поблагодарили x-code за это полезное сообщение:

    metamorpho(13.08.2020), SegaBoy(13.08.2020)

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    22.02.2014
    Адрес
    г. Курган
    Сообщений
    1,706
    Спасибо Благодарностей отдано 
    275
    Спасибо Благодарностей получено 
    318
    Поблагодарили
    222 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Перегнал плеер от Апогея, который выкладывал SegaBoy.
    Пересчитал коэффициенты для Вектора.
    Вот что получилось. С исходником.

    metamorpho, в плеере таблицы оптимизированы, в них нет коэффициентов для нот, которые не используются в конкретной мелодии.
    Вложения Вложения
    Последний раз редактировалось KTSerg; 13.08.2020 в 18:24.

    Эти 2 пользователя(ей) поблагодарили KTSerg за это полезное сообщение:

    metamorpho(13.08.2020), SegaBoy(13.08.2020)

  4. #3

    Регистрация
    24.08.2012
    Адрес
    г. Волжский
    Сообщений
    458
    Спасибо Благодарностей отдано 
    792
    Спасибо Благодарностей получено 
    268
    Поблагодарили
    103 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от x-code Посмотреть сообщение
    Ответ - в спецификации MIDI. Параметр команды Pb - это 14-битное число от 0 до 16384. При конверсии:
    1. Это число нужно преобразовать в диапазон от -1 до 1. 8192 - это ноль, 16384 - это один, а 0 - это минус один. Всё, что между этими точками - вещественные числа в диапазоне от -1 до 1.
    2. Умножить на количество полутонов в диапазоне pitch bend (обычно +/- два полутона, т.е. умножаем на 2)
    3. Поделить на 12 (количество полутонов в октаве)
    4. Возвести двойку в степень числа, полученного на шаге 3
    5. Умножить базовую частоту ноты на результат шага 4
    Вот это да ?!?!
    Всё-таки кажется как-то попроще это должно быть.
    Подождём ответ SegaBoy, узнаем что он делает с этим Pb.

    Цитата Сообщение от KTSerg Посмотреть сообщение
    Перегнал плеер от Апогея, который выкладывал SegaBoy.
    Пересчитал коэффициенты для Вектора. Вот что получилось. С исходником.
    KTSerg, огромное спасибо!!

  5. #4

    Регистрация
    12.11.2009
    Адрес
    Москва
    Сообщений
    403
    Спасибо Благодарностей отдано 
    50
    Спасибо Благодарностей получено 
    90
    Поблагодарили
    66 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от metamorpho Посмотреть сообщение
    Вот это да ?!?!
    Всё-таки кажется как-то попроще это должно быть.
    Подождём ответ SegaBoy, узнаем что он делает с этим Pb.
    Всё верно x-code расписал. Из описания выше формула получается следующая:
    Код:
    noteFreq * 2 ^ ((pitchBend - 8192) / 8191 * halfToneNum / 12)
    где noteFreq это базовая частота ноты к которой применяем изменение pitchBend, а halfToneNum это количество полутонов на которое можно сдвинуть высоту ноты вверх или вниз. В описании выше оно указано как ±2, но может быть от ±2 до ±12 (я как раз использую ±12, правда я уже не помню как пришёл именно к такому значению).

  6. #5

    Регистрация
    24.08.2012
    Адрес
    г. Волжский
    Сообщений
    458
    Спасибо Благодарностей отдано 
    792
    Спасибо Благодарностей получено 
    268
    Поблагодарили
    103 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Эта невероятная Pb. Что-то я запутался в её вычислении.

    К примеру в миди тексте дано следующее:
    77 On ch=2 n=76 v=127
    77 Pb ch=2 v=8122

    Что означает в канал номер 2 загрузить ноту 76 + применить к этой ноте Pb

    Я так понял параметр v=8122 (уровень громкости) всё же учитывается при конверсии ?
    Иначе на основании чего вычислять Pb ?

    По инструкции:
    1. Это число нужно преобразовать в диапазон от -1 до 1.
    0 - это минус один 8192 - это ноль 16384 - это один
    Всё, что между этими точками - вещественные числа в диапазоне от -1 до 1.

    Т.е. всё что от 0 до 8191 это Pb=-1 ?
    А если ровно 8192 то это Pb=0 ?
    А всё что от 8193 до 16384 это Pb=1 ?

    И тогда получается что в данном случае Pb=-1 т.к. v=8122 т.е. меньше 8192

    Правильно ли я понял ?

    -----------------------------------
    Цитата Сообщение от SegaBoy Посмотреть сообщение
    Всё верно x-code расписал. Из описания выше формула получается

    следующая:
    Код:
    noteFreq * 2 ^ ((pitchBend - 8192) / 8191 * halfToneNum / 12)
    где noteFreq это базовая частота ноты к которой применяем изменение pitchBend, а halfToneNum это

    количество полутонов на которое можно сдвинуть высоту ноты вверх или вниз. В описании выше оно

    указано как ±2, но может быть от ±2 до ±12 (я как раз использую ±12, правда я уже не помню как

    пришёл именно к такому значению).

    noteFreq * 2 ^ ((pitchBend - 8192) / 8191 * halfToneNum / 12)

    noteFreq это понятно взять нужно из таблицы частот нот
    pitchBend=-1 (в данном примере)
    А как понять чему равен halfToneNum ? ±12
    Он зависит от значения Pb ?
    т.е. если Pb=0 тогда соответственно halfToneNum=0
    если Pb=1 тогда соответственно halfToneNum=12
    если Pb=-1 тогда соответственно halfToneNum=-12

    И тогда получается что в данном случае halfToneNum=-12 т.к. Pb=-1

    Правильно ли я понял ?
    -------------------------------------

    В результате получается
    если Pb=0 тогда воздействия на ноту никакого не будет
    если Pb=1 тогда если например была нота до#2-й октавы то она станет до#3-й октавы
    если Pb=-1 тогда если например была нота до#2-й октавы то она станет до#1-й октавы

    Т.е. при конверсии алгоритм такой:
    если Pb=0 тогда пропускаем т.к. ничего не меняется
    если Pb=1 тогда номер ноты=номер ноты+12
    если Pb=-1 тогда номер ноты=номер ноты-12

    Если это так то зачем нужны сложные формулы, если вместо Pb можно было сразу номер ноты записать.

    ====================================
    Ещё вопрос определения ноты.

    Вот таблица 84-х нот (их частот) для Вектора.
    Как считаются ноты ?
    Т.е. n=1 (из миди текста) это соответствует какой ноте из таблицы для Вектора ?
    n=1 это "до" контр октавы или это "си" 4-й октавы ?

    Скрытый текст


    note_table:
    ; контр-октава (12 нот)
    dw 45872,43290,40872,38560,36408,34364,32432,30612,28 902,27273,25729,24311 ;

    до/до#/ре/ре#/ми/фа/фа#/соль/соль#/ля/ля#/си
    ; большая-октава
    dw 22936,21645,20436,19280,18204,17182,16216,15306,14 451,13636,12876,12146 ; до до# ре ре# ми фа

    фа# соль соль# ля ля# си
    ; малая-октава
    dw 11468,10823,10218,9646,9102,8591,8108,7653,7229,68 18,6438,6075 ; до до# ре ре# ми фа фа# соль

    соль# ля ля# си
    ; 1-я октава
    dw 5734,5415,5107,4823,4551,4296,4054,3827,3614,3409, 3219,3036 ; до до# ре ре# ми фа фа# соль

    соль# ля ля# си
    ; 2-я октава
    dw 2867,2708,2554,2412,2275,2147,2027,1913,1805,1705, 1609,1519 ; до до# ре ре# ми фа фа# соль

    соль# ля ля# си
    ; 3-я октава
    dw 1433,1353,1277,1205,1137,1074,1014,957,904,852,804 ,759 ; до до# ре ре# ми фа фа# соль соль# ля

    ля# си
    ; 4-я октава
    dw 717,677,639,602,569,537,507,472,452,426,402,380 ; до до# ре ре# ми фа фа# соль соль# ля ля# си
    [свернуть]
    Последний раз редактировалось metamorpho; 14.08.2020 в 09:14.

  7. #6

    Регистрация
    05.01.2009
    Адрес
    Харьков
    Сообщений
    157
    Спасибо Благодарностей отдано 
    23
    Спасибо Благодарностей получено 
    13
    Поблагодарили
    11 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от metamorpho Посмотреть сообщение
    Т.е. всё что от 0 до 8191 это Pb=-1 ?
    А если ровно 8192 то это Pb=0 ?
    А всё что от 8193 до 16384 это Pb=1 ?
    Нет. Я не зря писал уточнение, что при приведении к диапазону -1..+1 получается вещественное число.

    При исходной команде
    77 Pb ch=2 v=8122
    получается

    (8122 - 8192) / 8191 ~= -0,0085
    -0,0085 * 12 / 12 = -0,0085
    2^-0,0085 ~= 0,9941

    Это и есть наш искомый множитель частоты

    - - - Добавлено - - -

    Цитата Сообщение от metamorpho Посмотреть сообщение
    Как считаются ноты ?
    Т.е. n=1 (из миди текста) это соответствует какой ноте из таблицы для Вектора ?
    n=1 это "до" контр октавы или это "си" 4-й октавы ?
    Если правильно читаю спецификацию MIDI, то n выражается в полутонах, 60 соответствует ноте "до" первой октавы.
    Соответственно, 61 - это до диез первой октавы, 59 - это си малой октавы (помним, что между "си" предыдущей октавы и "до" следующей всего один полутон)
    Последний раз редактировалось x-code; 14.08.2020 в 10:22.

    Этот пользователь поблагодарил x-code за это полезное сообщение:

    metamorpho(14.08.2020)

  8. #7

    Регистрация
    24.08.2012
    Адрес
    г. Волжский
    Сообщений
    458
    Спасибо Благодарностей отдано 
    792
    Спасибо Благодарностей получено 
    268
    Поблагодарили
    103 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от x-code Посмотреть сообщение
    Нет. Я не зря писал уточнение, что при приведении к диапазону -1..+1 получается вещественное число.
    При исходной команде получается
    (8122 - 8192) / 8191 ~= -0,0085
    -0,0085 * 12 / 12 = -0,0085
    2^-0,0085 ~= 0,9941
    Это и есть наш искомый множитель частоты

    Тогда получиться частота, которой нет в статичной Векторовской таблице нот
    и значит нужно для каждой мелодии делать свою специфическую таблицу нот (частот) учитывая все варианты Pb.

    Цитата Сообщение от x-code Посмотреть сообщение
    Если правильно читаю спецификацию MIDI, то n выражается в полутонах, 60 соответствует ноте "до" первой октавы.
    Соответственно, 61 - это до диез первой октавы, 59 - это си малой октавы (помним, что между "си" предыдущей октавы и "до" следующей всего один полутон)
    В Векторовской статичной таблице нот всего 84 ноты и такие данные как-то не совместимы с этой таблицей. И что тогда делать ?

  9. #8

    Регистрация
    05.01.2009
    Адрес
    Харьков
    Сообщений
    157
    Спасибо Благодарностей отдано 
    23
    Спасибо Благодарностей получено 
    13
    Поблагодарили
    11 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от metamorpho Посмотреть сообщение
    значит нужно для каждой мелодии делать свою специфическую таблицу нот (частот) учитывая все варианты Pb.
    Я бы в результат конверсии сразу записывал готовые предрасчитанные значения делителя частоты для таймера.

  10. #9

    Регистрация
    12.11.2009
    Адрес
    Москва
    Сообщений
    403
    Спасибо Благодарностей отдано 
    50
    Спасибо Благодарностей получено 
    90
    Поблагодарили
    66 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от metamorpho Посмотреть сообщение
    Тогда получиться частота, которой нет в статичной Векторовской таблице нот
    и значит нужно для каждой мелодии делать свою специфическую таблицу нот (частот) учитывая все варианты Pb.
    В Векторовской статичной таблице нот всего 84 ноты и такие данные как-то не совместимы с этой таблицей. И что тогда делать ?
    У меня для каждой мелодии своя таблица - не одна какая-то общая или универсальная. Алгоритм такой - сначала добываем все задействованные ноты и применяем к ним Pb - столько и какие есть в конкретной мелодии. Не все какие бывают в природе, а только те что нужны для конкретного случая. Получаются разные частоты. Из этих частот вычисляем нужные константы - просто делим частоту каналов ВИ53 на значение частоты "нот". Затем можно оставить эти значения, но они двухбайтовые и часто повторяются. Поэтому и был выбран вариант с таблицей "нот" - хотя в данном случае правильнее будет таблицей констант.

    Этот пользователь поблагодарил SegaBoy за это полезное сообщение:

    metamorpho(15.08.2020)

  11. #10

    Регистрация
    22.02.2014
    Адрес
    г. Курган
    Сообщений
    1,706
    Спасибо Благодарностей отдано 
    275
    Спасибо Благодарностей получено 
    318
    Поблагодарили
    222 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SegaBoy Посмотреть сообщение
    У меня для каждой мелодии своя таблица - не одна какая-то общая или универсальная. ... Поэтому и был выбран вариант с таблицей "нот" - хотя в данном случае правильнее будет таблицей констант.
    Кстати, понятно, что это универсальный алгоритм (отдельная таблица для каждого канала), и он не оптимален во всех случаях.
    В тех двух мелодиях, что были выложены, и в которых я пересчитывал коэффициенты для Вектора, таблица второго канала почти полностью совпадала с таблицей первого канала. За небольшим исключением. И в данных случаях было бы компактнее сделать одну таблицу для всех трёх каналов, чтобы не дублировались коэффициенты.
    Хотя это мелочь, (при общей таблице) экономилось-бы всего около десятка байт.

    Этот пользователь поблагодарил KTSerg за это полезное сообщение:

    metamorpho(15.08.2020)

Страница 32 из 39 ПерваяПервая ... 282930313233343536 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Бейсики для Вектора-06Ц и клонов
    от ivagor в разделе Вектор
    Ответов: 696
    Последнее: 25.10.2025, 02:34
  2. Картотека ПО для Вектора-06ц
    от svofski в разделе Вектор
    Ответов: 719
    Последнее: 04.04.2024, 11:13
  3. Восстановление Вектора-06ц
    от Daniil Chislov 86 в разделе Вектор
    Ответов: 100
    Последнее: 11.03.2021, 00:23
  4. Ответов: 198
    Последнее: 26.04.2020, 13:05
  5. Ответов: 58
    Последнее: 06.07.2019, 23:56

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •