Важная информация

User Tag List

Страница 35 из 45 ПерваяПервая ... 313233343536373839 ... ПоследняяПоследняя
Показано с 341 по 350 из 443

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

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

    По умолчанию

    Цитата Сообщение от metamorpho Посмотреть сообщение
    а ещё в программе обработки прерываний должны обрабатываться нижеприведённые данные.
    Судя по всему, на Апогее порты отображены в адреса ОЗУ, поэтому первые четыре константы в этом коде - это Апогеевский аналог адресов Векторовских портов 08-11.
    Три последние константы - это константы управляющих слов для инициализации каналов таймера. Почему для второго канала это $be, а не $b6 - возможно, на Апогее используется другой режим таймера.

    Цитата Сообщение от metamorpho Посмотреть сообщение
    А в программе обработки прерываний как у тебя они обрабатываются ?
    Так установка режима таймера и запись коэффициента деления обычно и происходит в прерывании, просто потому, что прерывание - это чуть ли не единственная надёжная привязка к реальному времени, благодаря которой можно управлять длительностью звучания нот без циклов задержек, во время которых центральный процессор не сможет делать ничего полезного.

    Считай, что прерывание, это метроном, который тикает 50 раз в секунду. Зарядил канал таймера играть первую ноту - отсчитываешь нужное количество тактов метронома сообразно длительности ноты и выбранному темпу - затем программируешь канал таймера играть следующую ноту (или останавливаешь таймер, если нужна пауза).

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

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

    Вот там, где между соседними нотами - всего полутон (между ми и фа, и между си и до) - ты и не видишь в таблице никаких диезов, потому что в мажорной гамме фа - это и есть ми диез, а до - это си диез предыдущей октавы.

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

    jerri (13.08.2020), metamorpho (13.08.2020)

  3. #342
    Activist Аватар для metamorpho
    Регистрация
    24.08.2012
    Адрес
    г. Волжский
    Сообщений
    353
    Спасибо Благодарностей отдано 
    618
    Спасибо Благодарностей получено 
    193
    Поблагодарили
    66 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от x-code Посмотреть сообщение
    Судя по всему, на Апогее порты отображены в адреса ОЗУ, поэтому первые четыре константы в этом коде - это Апогеевский аналог адресов Векторовских портов 08-11.
    Три последние константы - это константы управляющих слов для инициализации каналов таймера. Почему для второго канала это $be, а не $b6 - возможно, на Апогее используется другой режим таймера.
    .....
    Так это что, получается этот код плеера с Апогея и есть то что нужно вставлять
    в программу обработки прерываний на Векторе (изменив управляющие команды для портов) ?

    Цитата Сообщение от x-code Посмотреть сообщение
    .........Вот там, где между соседними нотами - всего полутон (между ми и фа, и между си и до) - ты и не видишь в таблице никаких диезов, потому что в мажорной гамме фа - это и есть ми диез, а до - это си диез предыдущей октавы.
    x-code, спасибо, теперь стало понятней !!

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

    По умолчанию

    Цитата Сообщение от metamorpho Посмотреть сообщение
    этот код плеера с Апогея и есть то что нужно вставлять
    в программу обработки прерываний на Векторе (изменив управляющие команды для портов) ?
    Ну, почти. В Апогее, по всей видимости, синхронизация с обратным ходом луча делается не по прерыванию, поэтому в коде плеера есть цикл ожидания обратного хода луча с меткой vsync. На Векторе это не нужно, т.к. обработчик прерывания сам вызовется в нужный момент. А вот всё, что идёт ниже цикла ожидания - да, вполне можно переиспользовать, только заменив в коде программирования режимов таймера обращения к ячейкам памяти pit_xxxx_port обращениями к соответствующим номерам портов на Векторе.

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

    metamorpho (13.08.2020)

  6. #344
    Activist Аватар для metamorpho
    Регистрация
    24.08.2012
    Адрес
    г. Волжский
    Сообщений
    353
    Спасибо Благодарностей отдано 
    618
    Спасибо Благодарностей получено 
    193
    Поблагодарили
    66 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Немного новостей. Сейчас в целом различные моменты игры (кроме музыки) оформились.
    Так что пока их откладываю в сторону и занимаюсь разработкой кода для проигрывания музыки.
    Музыка (для ВИ53), оказалась наиболее специфичной и незнакомой темой для меня.
    Но надеюсь с помощью тех кто мне помогает напишу код для музыки

    А пока вот (rom) для тестов. Уровни ещё не шлифовал (просто наброски).
    Некоторые из них непроходимы. Переключаться между уровнями можно клавишей "Тab".
    Интересно ваше мнение насчёт эффекта при взятии монеты.
    Первоначально была графика при гибели героя (аж семь кадров исчезания типа взрыва), но от этого пришлось отказаться т.к. памяти не хватает. Поэтому вместо графики, был написан эффект при гибели героя, который так себе получился, но есть планы его доработать до чего-то лучшего
    Может у кого-то будут какие советы по игре - пишите.
    Из "крупных" данных в игру осталось вставить музыку и заставку - надеюсь памяти хватит
    Вложения Вложения

  7. #345
    Activist Аватар для metamorpho
    Регистрация
    24.08.2012
    Адрес
    г. Волжский
    Сообщений
    353
    Спасибо Благодарностей отдано 
    618
    Спасибо Благодарностей получено 
    193
    Поблагодарили
    66 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    SegaBoy, ещё 2 вопроса возникли.

    --------------------------Вопрос 1-й.
    Pb - изменить высоту ноты (pitch bend). В команде Pb указано значение относительно ноты используемой в последней команде On.
    Как преобразуется нота с учётом Pb ?

    Например
    76 On ch=3 n=50 v=90
    76 Pb ch=3 v=8160

    здесь нота n=50 (допустим это 2-я октава нота до# её частота 2708 из таблицы частот для нот )
    При преобразовании миди текста как Pb повлияет на эту ноту ? Изменит высоту ноты в какую сторону ?

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

    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 ; до до# ре ре# ми фа фа# соль соль# ля ля# си

  8. #346
    Member
    Регистрация
    05.01.2009
    Адрес
    Харьков
    Сообщений
    151
    Спасибо Благодарностей отдано 
    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.

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

    metamorpho (13.08.2020), SegaBoy (13.08.2020)

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

  11. #347
    Veteran
    Регистрация
    22.02.2014
    Адрес
    г. Курган
    Сообщений
    1,658
    Спасибо Благодарностей отдано 
    226
    Спасибо Благодарностей получено 
    301
    Поблагодарили
    212 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

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

    metamorpho (13.08.2020), SegaBoy (13.08.2020)

  13. #348
    Activist Аватар для metamorpho
    Регистрация
    24.08.2012
    Адрес
    г. Волжский
    Сообщений
    353
    Спасибо Благодарностей отдано 
    618
    Спасибо Благодарностей получено 
    193
    Поблагодарили
    66 сообщений
    Mentioned
    1 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, огромное спасибо!!

  14. #349
    Activist Аватар для SegaBoy
    Регистрация
    12.11.2009
    Адрес
    Москва
    Сообщений
    390
    Спасибо Благодарностей отдано 
    38
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    59 сообщений
    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, правда я уже не помню как пришёл именно к такому значению).

  15. #350
    Activist Аватар для SegaBoy
    Регистрация
    12.11.2009
    Адрес
    Москва
    Сообщений
    390
    Спасибо Благодарностей отдано 
    38
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    59 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от x-code Посмотреть сообщение
    ... Почему для второго канала это $be, а не $b6 - возможно, на Апогее используется другой режим таймера.
    При установке режимов работы 2 или 3, третий бит может иметь любое значение. Поэтому $3e, $7e и $be равнозначны $36, $76 и $b6.

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

    x-code (13.08.2020)

Страница 35 из 45 ПерваяПервая ... 313233343536373839 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Бейсики для Вектора-06Ц и клонов
    от ivagor в разделе Вектор
    Ответов: 575
    Последнее: 06.06.2024, 19:07
  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

Ваши права

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