Редакторы цифровой музыки на ZX Spectrum

Давным-давно nodeus таки собирался сделать подкаст про цифровую музыку на ZX Spectrum, но пока не сложилось.

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


Немного о цифровой музыке
Так уж сложилось, что понятие «цифровая музыка» (что характерно, бессмысленное по отношению к спектруму) появилось как альтернатива «просто музыке» с использованием тоновых генераторов со всякими алгоритмическими эффектами на базе бипера или сопроцессора AY. А почему бы нет? Аппаратура (ЦАП) есть: тот же однобитный бипер, у AY ситуация получше- аж три четырехбитных канала, кому мало- можно собрать из говна и палок на коленке Covox, а то и два (как на Profi) или четыре (SounDrive). С источниками семплов тоже проблем особых нет- на соседних платформах данный вид творчества вовсю цветет и пахнет. Памяти, правда, маловато. И проц не сильно быстрый (что при отсутствии аппаратных помощников довольно критично). Но уж что есть, то есть. Не впервой выкручиваться в таких суровых условиях. Дело остается за софтом.

А что с софтом?
Вкратце: он есть. И даже весьма много. Но, к вящему сожалению, многие редакторы так и не вышли из стадии бет, а музыканты не проявили достаточно интереса к этой теме (оно и понятно- цифровую музыку не особо встроишь в игру или журнал, ее надо просто слушать). По моим оценкам, цифровые модули для спектрума составляют всего ~1% от всех треков для этой платформы.

Как все работает
Берешь и кидаешь Общий алгоритм относительно прост: в памяти лежат звуковые семплы, есть код, занимающийся многоканальным выводом указанных семплов в порты ЦАП. Возможно, с микшированием (если число каналов трека не совпадает с числом каналов ЦАП). Возможно, со всякими эффектами (если они есть). На прерываниях висит управляющая программа, интерпретирующая паттерны и корректирующая вышеупомянутый код вывода (выставляет адреса семплов, частоту их вывода, параметры эффектов и т.п.). Дабы сильно не загружать прерывания, используется максимально оптимизированный формат хранения паттернов для облегчения их разбора (в отличие от трекеров для AY- место все равно экономить особо не за чем, а вот процессорное время очень даже стоит). Поскольку семплы хранятся в какой-то одной тональности, для ее изменения в процессе воспроизведения используется метод частотного сдвига (ЕМНИП). Если говорить проще, меняется шаг, с которым происходит вычитывание семплов из памяти (период вывода в порты обычно постоянен). Для этого обычно применяются числа с фиксированной запятой:

  ld a,(hl)
  and a
  jr z,silence
  out (port),a
  ld a,c
step_lo=$+1
  add a,0
  ld c,a
  ld a,l
step_hi=$+1
  adc a,0
  ld l,a
  adc a,h
  sub l
  ld h,a

Адрес семпла хранится в тройке регистров HLC: реальный в HL и дробная часть в C. Для плееров, использующих верхнюю память, частью адреса также является номер страницы. В переменных step_lo/step_hi хранится дробная и целая часть шага, который берется из таблички при установке ноты и связанных с ней эффектов. Также становится очевидна назревающая проблема нехватки регистров. Для ее решения применяется ряд разных ухищрений, постоянно балансирующих между функциональностью и скоростью работы (с уклоном в последнюю).

Собственно, софт
Ниже представлен в алфавитном порядке небольшой обзор тех редакторов цифровой музыки, которые удалось изучить достаточно для их поддержки в ZXTune. Поскольку я ни разу не творческий человек, а быдло технарь, обзор несколько однобокий, с уклоном в эти самые технические детали. Уж извините:)

Chip Tracker

Автор: Alone Coder
Последняя версия: 1.4 (2007)
Chip TrackerЧисло каналов: 4
Поддерживаемые устройства: AY, Covox, SounDrive
Разрядность семплов: 8 бит
Поддерживаемая память: 128кБ
Параметры трека: до 256 позиций, до 31 паттерна, до 64 строк в паттерне, 16 семплов общим объемом ~48кБ
Диапазон: 5 октав
Громкость: не поддерживается
Эффекты: завершение паттерна, скольжение тона (в условных единицах), смена темпа, смещение в семпле

Особенностью редактора является оптимизированный по скорости плеер, позволяющий за 890 тактов вывести по 4 значения во все каналы (для SounDrive версии), что дает частоту микширования около 15.5кГц.
Формат файла также оптимизирован по размеру- неиспользуемые паттерны и семплы не сохраняются.

Digital Music Maker

Автор: Baca/Lavers/Dream Makers (1.x), Игорь Юдинцев (2.x)
Последняя версия: 1.x (1995), 2.x (1998)
Digital Music MakerDigital Music Maker 2Число каналов: 3
Поддерживаемые устройства: AY (1.x), SounDrive (2.x)
Разрядность семплов: 4 бита (1.x), 8 бит (2.x)
Поддерживаемая память: 128кБ
Параметры трека: до 50 позиций, до 24 паттернов, до 64 строк в паттерне, 16 (на деле 15) семплов общим объемом до ~96 кБ
Диапазон: 5 октав
Громкость: 16 уровней
Эффекты: смена темпа, скольжение тона и вибрато (в условных единицах и полутонах), удвоение ноты (нота начинает звучать заново через определенное время), скольжение громкости, подмешивание ноты.

Первая версия (первый скриншот) отличалась спартанским интерфейсом и необычной нотацией записи ноты (начиная с октавы). Следующая версия внесла некоторые исправления и улучшения. В частности, повысилась разрядность семплов с 4 бит до 8. К сожалению, данную версию найти я так и не смог.
Плеер выдает частоту микширования примерно 9.8кГц (для AY) и примечателен своей навороченносью. Например, эффект подмешивания ноты (частичная замена звучания одной ноты другой из предопределенного набора пар нота-семпл) закладывается на скорость работы плеера и достаточно сложен в эмуляции.
Формат файла оптимизирован по размеру (и ограничен 255 секторами) — сохраняются только используемые паттерны и семплы, которые также упаковываются (для 4-битного формата).

Digital Studio

Автор: D.J.Serg, Nikol Nazarov (оригинал), Alex, STS, Disabler, Stranger, Viking (доработки)
Последняя версия: 1.12 (1995), 2.05 (1998)
Digital StudioЧисло каналов: 3
Поддерживаемые устройства: AY, Covox, SounDrive, DMA USC
Разрядность семплов: 4 бит (AY), 8 бит (все остальное)
Поддерживаемая память: 128кБ
Параметры трека: до 99 позиций, до 32 паттернов, до 64 строк в паттерне, до 16 семплов общим объемом до 96кБ
Диапазон: 4 октавы
Громкость: не поддерживается
Эффекты: завершение паттерна, смена темпа

Пожалуй, самый распространенный редактор, конкурирующий с Digital Music Maker'ом. Во многом благодаря простому интерфейсу, а также набору сопутствующего софта. Лично баловался, подбирая семплы в треки, сконверченные из SoundTracker'a:)
Плеер достаточно простой и микширует каналы с частотой ~10.1кГц (AY) и ~9.8кГц (SounDrive). Однако, при доработке плеера для SounDrive тоновые таблички не были пересчитаны (по крайней мере, в том плеере, который мне попался), поэтому тональность немного «плавает» для разных треков. Версию для DMA USC, к сожалению, найти не получилось.
Формат файла линейный, представляет собой практически снапшот памяти и состоит из двух файлов общим размером 434 сектора.

Extreme Tracker 1.x

Автор: Алексей Порфирьев
Последняя версия: 1.32 (1997)
Extreme Tracker 1.xЧисло каналов: 4
Поддерживаемые устройства: AY, Covox, SounDrive
Разрядность семплов: 8 бит
Поддерживаемая память: 128кБ
Параметры трека: до 100 позиций, до 32 паттернов, до 64 строк в паттерне, до 16 семплов общим объемом до 93кБ
Диапазон: 5 октав
Громкость: 16 уровней (1.31), не поддерживается (1.32)
Эффекты: смена темпа, скольжение тона (1.32)

Слабо известный редактор, в отличие от его реинкарнации версии 2.х, о которой надеюсь рассказать позже. При смене версии с 1.31 на 1.32 несовместимо поменялся внутренний формат файла, что внесло некоторые трудности при детекте и последующем разборе.
Плеер микширует каналы с частотой 7.8кГц (1.31) и 9.3кГц (1.32) — сказывается обработка громкости.
Формат файла линейный, состоит из двух файлов общим размером 440 секторов.

ProDigi Tracker

Автор: Steve/CAIG
Последняя версия: 0.09 (2000)
ProDigi TrackerЧисло каналов: 4
Поддерживаемые устройства: Covox, SounDrive, DMA USC
Разрядность семплов: 8 бит
Поддерживаемая память: 128кБ
Параметры трека: до 240 позиций, до 32 паттернов, до 64 строк в паттерне, до 16 семплов общим объемом до 80кБ, до 11 орнаментов длиной до 16 позиций
Диапазон: 5 октав
Громкость: не поддерживается
Эффекты: завершение паттерна, смена темпа

Трекер, написанный Steve потому что ему «не нравились существующие редакторы»:) Орнаменты оказались весьма классной штукой, с лихвой компенсирующей отсутствие эффектов. Как юзер, балдел от фичи прокручивания нотного текста прямо в процессе воспроизведения (слету не могу припомнить еще редакторов с такой фишкой), хотя это и изрядно портило звук.
Плеер выдает семплы с частотой 9.3кГц. Когда я делал на скорую руку версию плеера под Covox, то также не пересчитал таблички (по неопытности), а опытный музыкант Leo так ничего и не заметил:)
Формат файла линейный, состоит из двух файлов общим размером 387 секторов. Версия для DMA USC, к сожалению, несовместимо изменила формат (непонятно, зачем).

SQ Tracker (digital)

Автор: Shamsoft
Последняя версия: 1.0 (1997)
SQ TrackerЧисло каналов: 4
Поддерживаемые устройства: SounDrive
Разрядность семплов: 8бит
Поддерживаемая память: 256кБ
Параметры трека: до 100 позиций, до 32 паттернов, до 64 строк в паттерне, до 16 семплов общим объемом 128кБ
Диапазон: 5 октав
Громкость: 16 уровней
Эффекты: завершение паттерна, смена темпа, скольжение громкости

Очень интересный, но крайне слабораспространенный плеер. Писался автором «для себя» дабы в полной мере воспользоваться возможностями машины ZS Scorpion.
Плеер весьма интересный- использует выборку семплов с помощью стека, однако обеспечивает частоту микширования в 10.1кГц.
Формат файла линейный, максимальный размер- 580 секторов.

Sample Tracker

Автор: CBM/Luxus Software, Oldman (доработка)
Последняя версия: 2.1 (1993)
Sample TrackerЧисло каналов: 3
Поддерживаемые устройства: Beeper, AY, Covox, SounDrive
Разрядность семплов: 4 бит (AY), 8 бит (все остальное)
Поддерживаемая память: 48кБ (плеер), 128кБ (редактор)
Параметры трека: до 64 позиции, до 16 паттернов, до 64 строк в паттерне, до 16 семплов общим объемом 27кБ
Диапазон: 6 октав
Эффекты: завершение паттерна

Иностранный гость, весьма простой и незамысловатый трекер. По функционалу полностью повторяет DigitalStudio. В ZXTune даже используется один плеер на двоих. Но, к сожалению, в плеере есть одна ошибка, которую достаточно сложно сэмулировать (до сих пор пока не получилось) и из-за которой треки в ZXTune (а порой и на реале, если звезды не так сложатся) играются некорректно. Кто найдет эту ошибку- медалька за внимательность:

FE80: LD A,(HL)        t=7
FE81: OR A             t=4
FE82: LD E,A           t=4
FE83: LD A,#09         t=7
FE85: OUT (C),A        t=12
FE87: LD A,(DE)        t=7
FE88: OUT (#FD),A      t=11
FE8A: JR Z,#FED0       t=7/12
FE8C: LD A,#00         t=7
FE8E: ADD A,IYL        t=8
FE90: LD IYL,A         t=8
FE92: LD A,#00         t=7
FE94: ADC A,L          t=4
FE95: LD L,A           t=4
FE96: ADC A,H          t=4
FE97: SUB L            t=4
FE98: LD H,A           t=4
FE99: EXX              t=4

FE9A: LD A,(BC)        t=7
FE9B: OR A             t=4
FE9C: EXX              t=4
FE9D: LD E,A           t=4
FE9E: LD A,#0A         t=7
FEA0: OUT (C),A        t=12
FEA2: LD A,(DE)        t=7
FEA3: OUT (#FD),A      t=11
FEA5: EXX              t=4
FEA6: JR Z,#FED9       t=7/12
FEA8: LD A,#00         t=7
FEAA: ADD A,E          t=4
FEAB: LD E,A           t=4
FEAC: LD A,#00         t=7
FEAE: ADC A,C          t=4
FEAF: LD C,A           t=4
FEB0: ADC A,B          t=4
FEB1: SUB C            t=4
FEB2: LD B,A           t=4

FEB3: LD A,(HL)        t=7
FEB4: OR A             t=4
FEB5: EXX              t=4
FEB6: LD E,A           t=4
FEB7: LD A,#08         t=7
FEB9: OUT (C),A        t=12
FEBB: LD A,(DE)        t=7
FEBC: OUT (#FD),A      t=11
FEBE: EXX              t=4
FEBF: JR Z,#FEE3       t=7/12
FEC1: LD A,#00         t=7
FEC3: ADD A,D          t=4
FEC4: LD D,A           t=4
FEC5: LD A,#00         t=7
FEC7: ADC A,L          t=4
FEC8: LD L,A           t=4
FEC9: ADC A,H          t=4
FECA: SUB L            t=4
FECB: LD H,A           t=4

FECC: EXX              t=4
FECD: JP #FE80         t=10

FED0: LD HL,#5EE5      t=10
FED3: BIT 0,(IX+#00)   t=20
FED8: RET NZ           t=5/11

FED9: LD BC,#5EE5      t=10
FEDC: LD BC,#5EE5      t=10
FEDF: LD A,(BC)        t=7
FEE0: JP #FEB3         t=10

FEE3: LD HL,#5EE5      t=10
FEE6: LD HL,#5EE5      t=10
FEE9: LD A,(HL)        t=7
FEEA: JP #FECC         t=10

Как видно, плеер весьма прост и выдает 10.1кГц для AY. Такая скорость стала доступна из-за отказа использования верхней памяти.
Формат файла может быть оптимизирован по размеру (исключение неиспользуемых семплов) и имеет максимальный размер ~33кБ

Бонус! Видео (и аудио!:) ) воспроизведения музыки в этом редакторе от известного польского спектрумиста yerzmyey


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

Использовалась информация и картинки с сайта Speccy wiki.

P.S. Если кому еще интересны технические статьи, связанные с работой и разработкой ZXTune, предлагайте свои темы, может найду что рассказать:)

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

avatar
Если кому еще интересны…

А у тебя сомнения? ;) Конечно интересны. На мой взгляд тут всё интересно, кроме публицистики и тем о хайпе (:
avatar
Дык в том и тонкость чтобы не скатиться в рассказ о какой-то суровой технической фигне, которая интересна мне, но не читателям:) Посему прошу предложить темы.
avatar
А можно ссылки на сайты авторов или последние версии трекеров сразу же в обзор? Я понимаю конечно, что на SpeccyWiki многое есть, но все же :)
avatar
Дык все уже давно лежит на vtrdos.ru/system.php#s16
avatar
Дак и редакторы давно были, зачем обзор писать? Ладно, не слушай меня, я видимо слишком придираюсь. Я почему-то думал, что было бы неплохо иметь ссылки на каждый прод в обзоре.
avatar
Дык обзор-то не сколько софта, сколько технических деталей.
avatar
много их, оказывается
  • VBI
  • 0
avatar
Когда-то мы долго перебирали многие из этих редакторов. У каждого были свои плюсы. Но в итоге был выбран DMM. Его я как-то сделал универсальным на АУ или SounDrive, с авто настройкой под турбы, подправленный плеер +10% скорости, и сильно улучшенный интерфейс загрузки. У него есть особенность, есть двойные ноты на один канал. Это любил использовать Dreamer, по сути он миксовал с бассом аккомпанемент. Качество на Speccy всё равно не вытянуть да же на 11к, поэтому можно было использовать подобные приёмы.
Но был ещё один редактор, основная масса музыки осела на дисках. Вот с него снятое видео одной из мелодий.

PopRoller on the mason player
avatar
Вот ты-то мне и нужен!
У меня два с половиной вопроса по поводу масонской ложи линейки плееров Mason (цифровой и AY):
1) сколько в природе существует треков для редактора?
1.5) сколько из них уникальные (в смысле не конверсии других форматов)?
2) имеются ли описания форматов в открытом виде (чтоб не надо был дизассемблить)?
avatar
Помоги, пожалуйста, Vitamin-у с информацией. В зависимости от ответов есть вероятность, что саппорт Mason появится в ZXTune, и следом автоматом появится на ZX-Art, то есть Mason-треки можно будет слушать прямо с сайта, что может в свою очередь оказать какое-то влияние и на распространение формата и используемость трекера.
avatar
Я писал на DMM-ме. Как жаль что вся музня потеряна с дисками( Хотя… Один сохранился! Mk2.trd
avatar
Очень офигенная тема. Так получилось, что цифровая музыка — это редчайший пласт музыкального творчества. Нигде нет толковой коллекции, всё разрознено и по кусочкам.

Поэтому предлагаю — давайте соберем коллекцию авторской цифровой музыки на ZX-Art — весь инструментарий для этого есть, если чего не хватает — допишем.
Я могу позаливать всё сам, мне только нужна помощь в сборе материала. С чего можно начать?
avatar
С чего можно начать?
Например, с разгребания кладовок типа zxaaa.untergrund.net/ftp.html
Использую архивы оттуда в качестве тестовых для контроля качества. Например, в наборе MMA_CD, pos, energyminds, piratsky, vts, zxchip находится почти 55тыс модулей, из них около 19тыс уникальных. Из них примерно 160 — цифровые треки.
avatar
Спасибо! Попробую!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.