Обзор музыкального плеера под AY Дэвида Уиттакера.
Структурный формат плеера под AY соответствует его же плееру под бипер с небольшими изменениями:
У каждого канала (A, B, C) свой трек проигрывания, не зависимый от других.
Для всей мелодии устанавливается скорость, где такт музыки - n * 20ms, причем n, в отличие от плеера под бипер, является дробным числом.
Трек состоит из списка паттернов, а в каждом паттерне может быть произвольное количество нот и команд.
Нота - это код от 12..95 (84 ноты),
Команда начинается с кода $80.
Судя по коду плеера, в нем предполагалось или было, но позже урезано, наличие использования каналов шума для ударных инструментов.
В данной версии такой возможности нет.
Команды смешанного типа:
Код:
DEFB CMD_FetchCmd - . ; $80
DEFB CMD_VibratoPlus - . ; $81 - Vibrato Plus
DEFB CMD_VibratoMinus - . ; $82 - Vibrato Minus
DEFB CMD_FetchCmd - . ; $83
DEFB CMD_Transp - . ; $84 - Transposition
DEFB CMD_FetchCmd - . ; $85
DEFB CMD_FetchCmd - . ; $86
DEFB CMD_NextPattern - . ; $87 - Next Pattern
DEFB CMD_Vibrato - . ; $88 - Vibrato
DEFB CMD_Transp - . ; $89 - Transposition *
DEFB CMD_Tone - . ; $8A - Tone
DEFB CMD_Tone - . ; $8B - Tone *
DEFB CMD_Transp - . ; $8C - Transposition *
DEFB CMD_FetchCmd - . ; $8D
DEFB CMD_StopPlay - . ; $8E - Stop Play
DEFB CMD_FetchCmd - . ; $8F
DEFB CMD_FetchCmd - . ; $90
DEFB CMD_FetchCmd - . ; $91
DEFB CMD_LocalTransp - . ; $92 - Local Transposition
DEFB CMD_StopPlay - . ; $93 - Stop Play *
DEFB CMD_StopPlay - . ; $94 - Stop Play *
Вибрато:
Вибрато задается командой: $88, nn, mm, где
nn - константа инкремента/декремента частоты тона
mm - максимальное значение отклонения тона
Или командами:
$81 - вибрато начинающееся с плюсового отклонения
$82 - вибрато начинающееся с минусового отклонения
Для каждой следующей октавы ниже значения ноты 48, отклонение тона умножается на 2.
Транспозиция:
Есть два типа транспозиции, локальная и глобальная. Обе они равноценны, т.к. просто складываются с нотой, поэтому разделение на глобальную и локальную условно.
$84, nn - глобальная транспозиция. Повышение или понижение последующих нот на заданное число полутонов. (команда аналогична плееру под бипер)
$92, nn - локальная транспозиция.
Смешанные команды:
$8A - включить тон на канале (шум, соответственно, выключается, если был включен)
$87 - перейти к проигрыванию следующего паттерна (конец паттерна)
$8E - остановить проигрывание
Орнаменты:
Орнаменты имеют коды $C0..$CF (всего до 16 орнаментов).
Массив данных для орнамента - это просто набор смещений в полутонах. Последняя запись в орнаменте должна иметь бит 7 установленный в 1.
Пример орнамента:
Код:
DEFB $00,$03,$87 ; Орнамент 1: 0, 3, 7
Огибающие громкости ноты:
Огибающие имеют коды $D0..$DF (всего до 16 огибающих).
Из них используются только номера 0..4,6,8,10.
Формат огибающей:
1. Длительность шага огибающей (1..255) (1 - огибающая меняется на каждом такте плейера)
2. Массив громкостей для каждого шага
3. $80..$FF - конец огибающей
Пример огибающей:
Код:
DEFB $01 ; Скорость 1
Env1: DEFB $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06 ; Громкости
DEFB $87 ; Конец огибающей
Число тактов в ноте:
Команда $E0 + nn - 1, где nn - 1..32 (число тактов в ноте)