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

User Tag List

Показано с 1 по 10 из 17

Тема: Музыкальный движок Jason C. Brooke

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,058
    Спасибо Благодарностей отдано 
    220
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    Question Музыкальный движок Jason C. Brooke

    Значит, всем, кто интересуется созданием музыки на движке JCBrooke (Savage) - шлю его дизассемблер с метками и комментариями, а также привожу небольшое руководство по формату данных.

    Данный файл является дизассемблером движка из Savage 2. Движок JCBrooke немного различается в разных играх, но в Savage 2 (а также в Savage 3) присутствует наиболее полнофункциональная его версия.

    В Savage2 имеется три мелодии (заставка, "Wrong" и "Game over"), данные инициализации по каждой из них представлены в таблицах song_initdata_0, song_initdata_1 и song_initdata_2 соответственно. Таблица инициализации мелодии содержит: скорость воспроизведения (в прерываниях на треккерную строку, аналогично QNT. VAL в редакторе ASM). Каждый из трех каналов (два тональных (0,1) и один ударников (2)) имеет независимый список одноканальных паттернов для воспроизведения. В таблице инициализации для каждого из каналов содержится адрес списка паттернов, его длина и позиция зацикливания.

    Каждый список паттернов представляет собой двухбайтные адреса данных каждого паттерна соответственно. Формат данных паттернов для тональных каналов 0 и 1 одинаковый, для ударников формат особый.

    Формат данных каждого паттерна следующий:

    00..7F - нота или пауза, по номеру полутона
    80 - пауза

    когда в данных паттерна встречается нота или пауза, то обработка данных паттерна прекращается, и движок проигрывает указанную ноту на данном канале, учитывая ранее установленные параметры тембра, транспозиции и продолжительности этой ноты. Когда длительность ноты истекает, то движок приступает к дальнейшей интерпретации данных паттерна.

    81..87 - спецфункции:
    81 - glis. Спецэффект в виде плавного изменения (уменьшение) частоты тона. Следующий байт паттерна задает скорость понижения тона
    82 - конец паттерна
    83 - конец музыки (выход из процедуры воспроизведения)
    84 - установка транспозиции. Следующий байт данных паттерна задает конкретное значение.
    85 - установка параметра тембра skew (скважности). Следующий байт данных паттерна задает конкретное значение.
    86 - genfx. Запуск спецэффекта на данном канале. Спецэффекты для каналов 0 и 1 различаются. Спецэффект на канале 1 приводит к взаимодействию звуков на обоих каналах (в остальных случаях, включая спецэффект на канале 0, взаимодействия каналов нет). Спецэффект действует только на одну ноту. Чтобы повторить его для следующей ноты, нужно указать код 86 перед ней снова.
    87 - установка параметра тембра skew xoring (вариации скважности). Следующий байт паттерна задает конкретное значение.

    С0..DF - установка орнамента номер 0-1F соответственно
    E0..FF - установка длительности ноты, измеряемой количеством строк треккера (Quants) от 01 до 20

    перед воспроизведением первой ноты в песне на каждом канале обязательно проинициализировать все ее параметры: длительность, номер орнамента, транспозиция, skew, skew_xoring. Перед каждым паттерном инициализацию проводить не требуется.

    ---

    формат данных паттернов для ударного канала следующий:

    00 - конец паттерна
    01..7F - пауза в течение указанного числа строк (Quants)
    80..FF - воспроизвести звук ударника с номером 00..7F (немедленно).

    Фактически, коды 01..7F задают длительность ноты на канале ударников, но если для тональных каналов длительность нужно задавать ДО собственно ноты, то для канала ударников наоборот, сначала нужно указать, какой ударник, а потом его длительность.

    ---

    фактически количество различных ударников в движке Savage 2 ограничено 5 (с номерами от 0 до 4), воспроизведение ударников заключаются в вызове подпрограмм, адреса которых косвенно задаются таблицей по адресу noise_offsets, а сами подпрограммы располагаются после этой таблицы.

    То же самое можно сказать об орнаментах: хоть движок позволяет иметь до 32 орнаментов, но фактически их задано меньше, адреса данных каждого орнамента косвенно (в виде смещений) указаны в таблице orn_offsets. Формат данных орнамента следующий:

    00..7F - для каждого прерывания, задает смещение номера ноты для канала от базового, в полутонах
    80..FE - задает смещение номера ноты и запускает орнамент сначала
    FF - завершает обработку орнамента

    При этом орнамент 0 на уровне кода фактически является отсутствием орнамента, независимо от того, что в его данных может быть задано иное.

    Обработка орнаментов происходит каждое прерывание, и когда она используется, то это приводит к ощутимому ухудшению качества звука, появляется своего рода хрип. Поэтому, когда орнаментов нет ни на одном из каналов, то подпрограммы, обрабаывающие орнаменты, отключаются, и качество звука становится лучше.

    ---

    параметр skew задает тембр звука в виде изменения скважности формируемых прямоугольных импульсов. Параметр skew_xoring действует следующим образом. Когда он не равен нулю, то при каждом изменении на любом из каналов, параметр skew для этого канала ксорится с указанным числом. Если используются орнаменты, то изменение skew происходит 50 раз в секунду, а если они не используются - то соответственно частоте следования нот на обоих каналах. Таким образом, на канале, где проигрывается мелодия, будут наблюдаться изменения скважности синхронно с нотами на канале аккомпанемента.
    Вложения Вложения
    Последний раз редактировалось Barmaley_m; 20.01.2010 в 07:16.

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

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

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

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

Похожие темы

  1. Музыкальный редактор
    от GriV в разделе Для начинающих
    Ответов: 56
    Последнее: 21.06.2008, 12:19
  2. Четвертуха Jason Krueger-a
    от Conan в разделе Поздравления
    Ответов: 5
    Последнее: 07.08.2005, 16:32
  3. H.B. Jason
    от Conan в разделе Поздравления
    Ответов: 0
    Последнее: 24.07.2005, 21:01
  4. Куплю музыкальный процессор для Спектрума !!!
    от Andrnow в разделе Барахолка (архив)
    Ответов: 16
    Последнее: 04.07.2005, 22:34

Ваши права

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