07
Май
2022

Музыка!

Продолжаю переносить код в расширенную память и побеждать возникающие при этом глюки. Но это довольно скучное занятие. И чтобы не так было скучно, я решил попробовать добавить музыку в игру. Музыку от игры я нашел  в инете в формате KSS. Братец Yellow Rabbit успешно преобразовал его в формат PSG, за что ему огромное мерси! Полученный PSG я сжал конвертером Kuvo, в итоге первая музыкальная тема в сжатом psg заняла чуть больше 4000 (8). Еще один вариант музыки мне прислал KoD, за что ему тоже спасибо. Была надежда, что этот вариант будет в формате какого-нибудь муз.редактора, но это оказался тоже бинарник, скорей всего тоже kss.

И вот, как теперь выглядит Goonies для БК-0011М:

Почему я пытался найти музыку в формате редактора? Потому что с музыкой от Gooines была целая эпопея. Как оказалось, машины MSX бывают в варианте PAL и NTSC, с разной частотой вывода кадров видео. Вроде бы и фиг с ним, но у них к частоте кадров привязана скорость проигрывания музыки. В итоге на PAL-версиях музыка в играх играет медленнее, чем на NTSC. И если в нотном тексте темп музыки можно увеличить легко, то в PSG-формате это уже совсем не так легко. Поиски какого-то “Goonies для PAL-версии MSX” ничего не дали, зато я нашел кучу обсуждений “с какой же скоростью должны играть музоны на европейских версиях MSX и для какой скорости их писали авторы”. Если кто-то подскажет как немного ускорить PSG без потери качества воспроизведения (без потери нот и без сбивок ритма”, буду признателен.

Share

You may also like...

15 комментариев

  1. Yuri 'Jerri' Potapov:

    Хмм.. А если музыку по таймеру играть?
    Pal/NTSC это же 50/60

    • grf:

      Музыка и играется по таймеру. И на БК этот таймер примерно 50Гц и есть. А пишут они под 60Гц.

  2. Yuri 'Jerri' Potapov:

    У таймера есть какието другие настройки? можно ли его настроить на 60 герц?

  3. Yuri 'Jerri' Potapov:

    ? Валерий@ – 14.02.2012 02:56
    Доброго времени суток !
    ¤
    Уважаемые пользователи БК разъясните пожалуйста как работает таймер в подробностях ?
    Опорная частота, при каких условиях происходит прерывание, как маскируется, разница в БК-0010 и БК-0011 (в смысле таймера).
    ¤
    В инете нашел две ссылки, но они толком не разъяснили, при попытке высчитать опорную частоту получилась какая то фигня
    http://code.google.com/p/bk0010/wiki/Timer — здесь описание регистров
    ¤
    А вот это было написано во второй:
    10 POKE &O177706,32767% ‘установка длительности периода S0
    20 POKE &O177712,&O160 ‘запуск таймера
    30 ? AT(0,0)PEEK(&O177710) ‘смотрим, как он работает
    40 GOTO 30
    Таймер работает независимо от работы программы. Содержимое счетчика
    времени определяется как результат функции PEEK(&O177710) и
    периодически уменьшается от S0 до 0 (рис.10).
    В приведенном примере при S0=32767 период счетчика Т=89,657 с [6].
    ¤
    Посмотре по портам О160 это 5,6 бит в 1 и 4-тый бит запуск.
    5,6 это опорная / 64
    берем 32768 * 64 = 2097152 импульсов за 89,657 с.
    следовательно 2097152 / 89.657 = 23390,834 это опорная частота, блин но это ерунда какая то.
    ¤
    Пожалуйста помогите разобраться.
    ? Александр Тишин (Sandro)@ – 14.02.2012 04:07
    Не путайте встроенный в процессор таймер и таймер с прерыванием по вектору 100. У первого никаких прерываний нет, работает на частоте процессора/(128*делитель). Второй есть только в БК-0011(М), работает с частотой 50 герц.
    ¤
    PS: 3000000/128 = 23437,5, а не 23390,834. У вас или в статье небольшая ошибка с округлением.

    там же еще какой то есть.

    • grf:

      Я в курсе. И там написано, что тот таймер не вызывает прерывания.

  4. Yuri 'Jerri' Potapov:

    а как тогда работала музыка в игре Kings Valley на 0010?
    или это другое?

    • grf:

      Там код был написан специальным образом, через определенное количество команд шел вызов подпрограммы вывода очередного кванта звука. Никаких прерываний по таймеру там не использовалось, т.к. на БК0010 их (прерываний по таймеру) вообще нет.

      • Yuri 'Jerri' Potapov:

        На двух БК звук в игре звучал по разному.
        на одном – нормальная жужжалка. На втором скрежет.
        как пояснишь?

        • grf:

          На одном из них не работал таймер, по значениям которого и определялось, прошло ли нужное кол-во времени при исполнении кода. Автор (Шишкин) на телеграм-канале БКшников все это объяснял сам.

          • Yuri 'Jerri' Potapov:

            Вооот.
            Тоесть таймер всетаки есть?
            Но используется сложно.
            Тогда ищи музыкантов.
            пусть переписывают музыку на новый плеер.
            там внутри свой собственный.

      • Yuri 'Jerri' Potapov:

        Кстати хороший способ. Что мешает разбавить код вызовами музыки?

        • grf:

          Зачем? Сейчас музыка играет так, как на всех европейских версиях MSX. Если ее немного ускорить (до 60Гц японских), будет веселее, но таких извратов оно не стоит.