Как стать автором
Обновить

Комментарии 15

Колоссально!

Очень круто.

Мне вот что интересно: в Спектруме обычно чиптюн-музыка играется в прерываниях, которые происходят 50 раз в секунду. На других платформах, где используются другие звуковые чипы, частота прерываний для передачи данных в регистры звукового чипа такая же?

И схожий вопрос про биперный движок: с какой характерной частотой на Спектруме делается управление бипером, чтобы получить 2-голосие по всеми эффектами вроде фазера, ударных и т.д.?

Для звуковых чипов частота обновления обычно равна кадровой частоте, 50 герц для PAL, 60 для NTSC. Это самый простой источник синхронизации с реальным временем, который всегда есть у микрокомпьютеров (как минимум флаг вертикального гашения, почти всегда прерывание). И довольно часто он же единственный доступный внешний синхросигнал.

Биперные движки синхронизируются чисто по скорости выполнения команд процессора, точно рассчитываются по тактам, время выполнения веток кода выравнивается дополнительными задержками. Скорость внутреннего цикла в двухголосых движках порядка 120-500 тактов, то есть 3500000 (тактовая частота процессора) / 120..500 = 7000...29166 герц. Она зависит от способа смешивания каналов. При простом чередовании скорость цикла желательно иметь как можно выше, по крайней мере ближе к 20 кГц, иначе будет слышна несущая (свист). Способы генерирующие короткие импульсы разной длительности, не так требовательны к скорости цикла, но она должна быть вдвое выше самой высокой генерируемой ноты.

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

NTSC, я так понимаю, в Японии использовался? Если взять чиптюн-трек с японского компьютера и воспроизвести на нашем, музыка будет медленнее играться?

Да. Это типичная история для приставки Денди, где японские NTSC-игры запускаются на переделанной под PAL приставке, и вся музыка (и дейстие) замедляется на 17 процентов.

Возможно, это будет немного оффтопом, но раз в статье было упоминание про язык MML, напишу немного о нем (так как сам в одно время занимался аранжировками с использованием этого языка), а также в чем его особенности в сочинении музыки по сравнению с использованием трекеров.

Подход тут в корне отличается. Любой трекер, как описывается в статье, в большинстве случаев - это WYSIWYG-программа, с графическим интерфейсом, где паттерны и ордер-лист композиции достаточно наглядно ее представляет и редактирование партитуры также происходит наглядно. Тогда же как MML - это что-то наподобие программы (то есть обычный текст, редактируемый в любом текстовом редакторе), которая впоследствии компилируется в воспроизводимый звуковой модуль (универсального MML-диалекта нет, так как у каждого звукового чипа свои особенности). Разница примерно такая же, как если делать документ в Word, или с использованием TeX.

Текст-программа на языке MML чаще всего структурируется - вначале это разнообразная метаинформация (название трека, автор, ...), далее идут описания инструментов (которые можно редактировать напрямую, но обычно они редактируются в отдельном WYSIWYG-редакторе, а затем получившийся текст с параметрами вставляется в программу), затем настройки каналов (каждый из который обычно привязан к одному генератору звукового чипа компьютера), и после этого сама партитура - набор музыкальных данных (ноты, паузы, размеры, регулировки инструментов, эффекты и прочее), перед которым идет название канала, который должен это проигрывать. Паттерны, присущие трекерному формату, отсутствуют - каждый канал играет все свои данные от начала и до конца (при этом возможно указать точку циклического воспроизведения), и вся логическая разбивка трека ложится исключительно на плечи аранжировщика. Также в MML нотация, в отличие от трекерной музыки, музыкальная - ноты и паузы тут имеют классические описания длительности (обычно указывается знаменатель, например для 1/64 это просто 64)

Определенные сходства с трекерным форматом все же есть. Например, выше упоминавшаяся концепция каналов (чаще всего они имеют заглавные буквы латинского алфавита, A-Z), но, которые в отличие от трекерных аналогов, чаще всего полностью независимы друг от друга. Есть определенные преимущества, присущие текстовому формату - можно оформлять подпрограммы или макрокоманды, которые затем вызываются в основном коде партитуры, и за счет которых можно параметризовать повторяющиеся участки музыки. Также формат текста позволяет проводить манипуляции средствами самого текстового редактора (поиск, замена, регулярные выражения и так далее)
Недостатки также присутствуют - за счет того, что это обычный текст, "увидеть" целиком весь трек сложно. Плюс также за счет независимости каналов вся синхронизация между ними ложится на аранжировщика. Нередки ситуации, когда за счет разной длительности общего числа тактов в разных каналах один начинает играть раньше (или позже другого). В трекерном формате такого не происходит за счет жесткой "сетки", которая формирует паттерн. Для решения этой проблемы несколько музыкальных тактов группируется (получается своеобразный "паттерн") и каждый такой "паттерн" уже потом редактируется индивидуально от других.

Причины популярности конкретно MML формата в японской компьютерной среде (в основном в саундтреках к играм и додзин-альбомах, демосцены в западном понимании там не было вообще) сугубо исторические. На ранних японских компьютерах в большинстве случаев имелся предустановленный диалект BASIC, в котором имелась упоминаемая в статье команда CMD PLAY. Эта команда проигрывала на звуковом чипе компьютера (который зависел от машины) ноты в простейшем диалекте MML-формата. На основе этого было разработано много MML-редакторов, которые часто оставляли BASIC-редактор как основу, а все музыкальные данные заносили в комментарии (так что MML-композиция оставалась также и валидной BASIC-программой). Обычно каждая компания или разработчик делали свой MML диалект под конретные нужды. Например, Юзо Косиро (известный как минимум по саундтреку Streets of Rage) написал свой MML-редактор MUCOM88 (распространыемый коммерчески под названием MUSIC LALF).

Тема MML-музыки довольно обширная, в спонтанный комментарий все нюансы не влезут, впору писать отдельную статью. От себя скажу, что как трекерный, так и MML формат имеют право на жизнь. Я, пытавшийся делать аранжировки как в том, так и в другом формате, так и не определился, какой из этих способов удобнее. Я думаю, было бы довольно интересно увидеть MML-диалект для биперной музыки.

Отдельная статья про MML нужна! Очень недоосвещённая тема как на русском, так и на английском, и при этом огромный пласт истории видеоигровой музыки.

На Спектруме был очень занимательный казус: когда только появился его местный Sound Tracker и первые мелодии из него в программах, одна из них попала к Klav'у, впоследствии заметному раннему композитору на платформе. Он не знал, в чём сделана эта музыка, трекеров ещё не видел. Тогда он разобрал код движка ST и написал вокруг него собственный редактор, в котором музыка вводится в текстовом редакторе, довольно похожим на MML образом. Вероятно это единственный MML-подобный редактор на платформе, да ещё с трекерным движком в основе.

Связь между MML и биперными движками относительно недавно была реализована в рамках bintracker, там есть плагин для ввода MML. Это также весьма занимательный проект универсального трекера, о котором я планирую написать через некоторое время в рамках обзора необычных трекеров.

Движок от Fuxoft (музыка к Tetris 2 и т.д.) не является одним из вариантов музыкального языка вроде MML?

И да, мне тоже было бы интересно про MML почитать.

Припоминаю, что про это говорили. Но модулей в исходном текстовом виде я раньше не видел, а fxm для AY_Emul обычный бинарник. Сейчас поискал, четыре года назад выложено автором: https://github.com/fuxoft/fxmasm. Не очень похоже на MML, скорее на обычный набор данных вручную в ассемблере.

Очень круто!
Кстати, для меня лично самым необычным (когда-то) был - Buzz Tracker https://www.jeskola.net/buzz/
Собственно на нем и треки получались необычные, но это уже PC-шная история, а первые треки - да, были в Sound Tracker на ZX Spectrum, пардон за приступ ностальгии...

Я долго сидел на Psycle, это архитектурный аналог Buzz. В этих трекерах очень крутой роутинг, можно без проблем создавать сколь угодно сложные и разнообразные параллельные цепочки эффектов. Чтобы повторить такое в каком-нибудь Reaper'е или FL, надо сильно напрячь извилины, а там всё делалось за секунды, максимально интуитивно, и при этом с теми же самыми VST.

кстати, у Psycle и звук прям значительно лучше был

Насчет "выстрелить себе в ногу" - команды Undo во фронтэнд-редакторе нет?

Есть Undo на одно действие. Как показала практика, это разумный компромисс.

Огромное спасибо за статью и жирнющий плюс в карму! Отдельное спасибо за первую половину статьи с ликбезом по трекерной музыке! Всегда завораживала трекерная музыка (из эпохи MS-DOS и преимущественно в STM-формате, а также MOD), и всегда было интересно как это устроено. Когда-то даже пытался запускать трекеры (в смысле редактор, а не проигрыватель) и что-то там потыкать, но дальше чем "Ни%*я не понял, но оочень интересно" дело не доходило. Автор дал хорошую мотивацию и кусок энтузиазма чтобы ещё покопаться в теме на досуге.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий