Редакторы цифровой музыки на ZX Spectrum
Давным-давно nodeus таки собирался сделать подкаст про цифровую музыку на ZX Spectrum, но пока не сложилось.
Попробую немного исправить эту ситуацию и рассказать хотя бы о технической стороне вопроса, в частности о технологии и инструментах для создания этой самой музыки.
из говна и палок на коленке Covox, а то и два (как на Profi) или четыре (SounDrive). С источниками семплов тоже проблем особых нет- на соседних платформах данный вид творчества вовсю цветет и пахнет. Памяти, правда, маловато. И проц не сильно быстрый (что при отсутствии аппаратных помощников довольно критично). Но уж что есть, то есть. Не впервой выкручиваться в таких суровых условиях. Дело остается за софтом.
Берешь и кидаешь Общий алгоритм относительно прост: в памяти лежат звуковые семплы, есть код, занимающийся многоканальным выводом указанных семплов в порты ЦАП. Возможно, с микшированием (если число каналов трека не совпадает с числом каналов ЦАП). Возможно, со всякими эффектами (если они есть). На прерываниях висит управляющая программа, интерпретирующая паттерны и корректирующая вышеупомянутый код вывода (выставляет адреса семплов, частоту их вывода, параметры эффектов и т.п.). Дабы сильно не загружать прерывания, используется максимально оптимизированный формат хранения паттернов для облегчения их разбора (в отличие от трекеров для AY- место все равно экономить особо не за чем, а вот процессорное время очень даже стоит). Поскольку семплы хранятся в какой-то одной тональности, для ее изменения в процессе воспроизведения используется метод частотного сдвига (ЕМНИП). Если говорить проще, меняется шаг, с которым происходит вычитывание семплов из памяти (период вывода в порты обычно постоянен). Для этого обычно применяются числа с фиксированной запятой:
Адрес семпла хранится в тройке регистров HLC: реальный в HL и дробная часть в C. Для плееров, использующих верхнюю память, частью адреса также является номер страницы. В переменных step_lo/step_hi хранится дробная и целая часть шага, который берется из таблички при установке ноты и связанных с ней эффектов. Также становится очевидна назревающая проблема нехватки регистров. Для ее решения применяется ряд разных ухищрений, постоянно балансирующих между функциональностью и скоростью работы (с уклоном в последнюю).
быдло технарь, обзор несколько однобокий, с уклоном в эти самые технические детали. Уж извините:)
Автор: Alone Coder
Последняя версия: 1.4 (2007)
Число каналов: 4
Поддерживаемые устройства: AY, Covox, SounDrive
Разрядность семплов: 8 бит
Поддерживаемая память: 128кБ
Параметры трека: до 256 позиций, до 31 паттерна, до 64 строк в паттерне, 16 семплов общим объемом ~48кБ
Диапазон: 5 октав
Громкость: не поддерживается
Эффекты: завершение паттерна, скольжение тона (в условных единицах), смена темпа, смещение в семпле
Особенностью редактора является оптимизированный по скорости плеер, позволяющий за 890 тактов вывести по 4 значения во все каналы (для SounDrive версии), что дает частоту микширования около 15.5кГц.
Формат файла также оптимизирован по размеру- неиспользуемые паттерны и семплы не сохраняются.
Автор: Baca/Lavers/Dream Makers (1.x), Игорь Юдинцев (2.x)
Последняя версия: 1.x (1995), 2.x (1998)
Число каналов: 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-битного формата).
Автор: D.J.Serg, Nikol Nazarov (оригинал), Alex, STS, Disabler, Stranger, Viking (доработки)
Последняя версия: 1.12 (1995), 2.05 (1998)
Число каналов: 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 сектора.
Автор: Алексей Порфирьев
Последняя версия: 1.32 (1997)
Число каналов: 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 секторов.
Автор: Steve/CAIG
Последняя версия: 0.09 (2000)
Число каналов: 4
Поддерживаемые устройства: Covox, SounDrive, DMA USC
Разрядность семплов: 8 бит
Поддерживаемая память: 128кБ
Параметры трека: до 240 позиций, до 32 паттернов, до 64 строк в паттерне, до 16 семплов общим объемом до 80кБ, до 11 орнаментов длиной до 16 позиций
Диапазон: 5 октав
Громкость: не поддерживается
Эффекты: завершение паттерна, смена темпа
Трекер, написанный Steve потому что ему «не нравились существующие редакторы»:) Орнаменты оказались весьма классной штукой, с лихвой компенсирующей отсутствие эффектов. Как юзер, балдел от фичи прокручивания нотного текста прямо в процессе воспроизведения (слету не могу припомнить еще редакторов с такой фишкой), хотя это и изрядно портило звук.
Плеер выдает семплы с частотой 9.3кГц. Когда я делал на скорую руку версию плеера под Covox, то также не пересчитал таблички (по неопытности), а опытный музыкант Leo так ничего и не заметил:)
Формат файла линейный, состоит из двух файлов общим размером 387 секторов. Версия для DMA USC, к сожалению, несовместимо изменила формат (непонятно, зачем).
Автор: Shamsoft
Последняя версия: 1.0 (1997)
Число каналов: 4
Поддерживаемые устройства: SounDrive
Разрядность семплов: 8бит
Поддерживаемая память: 256кБ
Параметры трека: до 100 позиций, до 32 паттернов, до 64 строк в паттерне, до 16 семплов общим объемом 128кБ
Диапазон: 5 октав
Громкость: 16 уровней
Эффекты: завершение паттерна, смена темпа, скольжение громкости
Очень интересный, но крайне слабораспространенный плеер. Писался автором «для себя» дабы в полной мере воспользоваться возможностями машины ZS Scorpion.
Плеер весьма интересный- использует выборку семплов с помощью стека, однако обеспечивает частоту микширования в 10.1кГц.
Формат файла линейный, максимальный размер- 580 секторов.
Автор: CBM/Luxus Software, Oldman (доработка)
Последняя версия: 2.1 (1993)
Число каналов: 3
Поддерживаемые устройства: Beeper, AY, Covox, SounDrive
Разрядность семплов: 4 бит (AY), 8 бит (все остальное)
Поддерживаемая память: 48кБ (плеер), 128кБ (редактор)
Параметры трека: до 64 позиции, до 16 паттернов, до 64 строк в паттерне, до 16 семплов общим объемом 27кБ
Диапазон: 6 октав
Эффекты: завершение паттерна
Иностранный гость, весьма простой и незамысловатый трекер. По функционалу полностью повторяет DigitalStudio. В ZXTune даже используется один плеер на двоих. Но, к сожалению, в плеере есть одна ошибка, которую достаточно сложно сэмулировать (до сих пор пока не получилось) и из-за которой треки в ZXTune (а порой и на реале, если звезды не так сложатся) играются некорректно. Кто найдет эту ошибку- медалька за внимательность:
Как видно, плеер весьма прост и выдает 10.1кГц для AY. Такая скорость стала доступна из-за отказа использования верхней памяти.
Формат файла может быть оптимизирован по размеру (исключение неиспользуемых семплов) и имеет максимальный размер ~33кБ
Бонус! Видео (и аудио!:) ) воспроизведения музыки в этом редакторе от известного польского спектрумиста yerzmyey
Использовалась информация и картинки с сайта Speccy wiki.
P.S. Если кому еще интересны технические статьи, связанные с работой и разработкой ZXTune, предлагайте свои темы, может найду что рассказать:)
Попробую немного исправить эту ситуацию и рассказать хотя бы о технической стороне вопроса, в частности о технологии и инструментах для создания этой самой музыки.
Немного о цифровой музыке
Так уж сложилось, что понятие «цифровая музыка» (что характерно, бессмысленное по отношению к спектруму) появилось как альтернатива «просто музыке» с использованием тоновых генераторов со всякими алгоритмическими эффектами на базе бипера или сопроцессора AY. А почему бы нет? Аппаратура (ЦАП) есть: тот же однобитный бипер, у AY ситуация получше- аж три четырехбитных канала, кому мало- можно собратьА что с софтом?
Вкратце: он есть. И даже весьма много. Но, к вящему сожалению, многие редакторы так и не вышли из стадии бет, а музыканты не проявили достаточно интереса к этой теме (оно и понятно- цифровую музыку не особо встроишь в игру или журнал, ее надо просто слушать). По моим оценкам, цифровые модули для спектрума составляют всего ~1% от всех треков для этой платформы.Как все работает
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)
Число каналов: 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)
Число каналов: 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)
Число каналов: 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)
Число каналов: 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)
Число каналов: 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)
Число каналов: 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)
Число каналов: 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 комментариев
А у тебя сомнения? ;) Конечно интересны. На мой взгляд тут всё интересно, кроме публицистики и тем о хайпе (:
Но был ещё один редактор, основная масса музыки осела на дисках. Вот с него снятое видео одной из мелодий.
PopRoller on the mason player
У меня два с половиной вопроса по поводу
масонской ложилинейки плееров Mason (цифровой и AY):1) сколько в природе существует треков для редактора?
1.5) сколько из них уникальные (в смысле не конверсии других форматов)?
2) имеются ли описания форматов в открытом виде (чтоб не надо был дизассемблить)?
Поэтому предлагаю — давайте соберем коллекцию авторской цифровой музыки на ZX-Art — весь инструментарий для этого есть, если чего не хватает — допишем.
Я могу позаливать всё сам, мне только нужна помощь в сборе материала. С чего можно начать?
Использую архивы оттуда в качестве тестовых для контроля качества. Например, в наборе MMA_CD, pos, energyminds, piratsky, vts, zxchip находится почти 55тыс модулей, из них около 19тыс уникальных. Из них примерно 160 — цифровые треки.