Комментарии 57
Спасибо, ролик с утра посмотрел на ютубе. Не знал совсем о таком направлении в формировании звука. Звучит конечно необычно.
Кстати, а не по тому ли принципу звук формировался на PC Speaker в 80-90-е? я слушал MOD файлы таким образом.
Для воспроизведения цифрового звука на PC Speaker на двух каналах таймера делался вполне честный ШИМ, с эквивалентным разрешением в 6 бит. Но в староглиняные времена и в играх на PC применялись подобные техники. С этим быстро завязали, так как новые процесоры с другими таймингами появлялись как грибы после дождя, а потом пошли звуковые карты, и смысл пропал.
с играми может и завязали, а вот музыку делали весьма долго.
по играм есть новодел где такое применяется - Planet X3
Так совпало, что в Planet X3 звуковой код делал я, и я там такого не применял (хотя хотел, но Дэвид был против). Может потом добавили, там были всякие пользовательские модификации типа расширенных видеорежимов.
я смотрел только его ролики по созданию игры и там у него в одном из роликов были вставки с теми кто делал музыку, в одном из рассказов речь шла о том, что на спикере кажется реализовано 3 канала, могу за выходные найти кусочек и указать таймкод. Как мне помнится это было в релизной игре сразу.
Я могу неправильно понимать сказанное в видео, но точно помню что на спикере проигрывался синтез его главной темы игры.
видео с канала Дэвида
на 4:25 упоминается про PC Speaker и 3 виртуальных канала.
на 5:58 примеры звучания
Для этой игры я делал звуковой код, редактор музыки и заглавный трек. Так что я примерно понимаю, о чём идёт речь. Про эту технику я давеча рассказывал на Хабре, там же упоминается и Planet X3.
Были машины с Win 3.1-9x без звуковых карт - почти все офисные. И для них был "драйвер pc спикера" http://old-dos.ru/files/file_546.html
Был полезен для озвучивания звуков ошибок.
Особенно 3 трек впечатлил
Звучит довольно круто, как по мне даже получше чем 128 со звуковым чипом. Круто!
У меня тоже иногда такие ощущения возникают. У чипа AY невозможно менять скважность прямоугольного импульса, только частоту. А в биперной музыке можно. Насколько я понимаю, в музыкальном чипе SID для Commodore64 скважность менять можно, и отличия в характере музыки для него сразу узнается по характерным звуковым эффектам - например, в самом начале музыкального трека игры Monty on the run слышно, как плавно скважность изменяется.
У SID не просто можно менять скважность, там безумные 4096 ступеней, можно менять её очень плавно.
Да, вот тут это хорошо слышно (и видно, благодаря визуализации).
Честно говоря, жаль, что в AY такой возможности нет. Добавление её, кмк, вряд ли бы сильно усложнило чип. А звучание это украшает и разнообразит весьма заметно. Интересно, известно ли, какой из двух чипов оказался в результате более распространен в мире? И для какого из них больше коммерческой музыки было создано, т.е. для официально продаваемых игр, например?
Действительно, очень жаль. Управление скважностью добавили в AY8930, восемь ступеней, звучит прекрасно. Кстати, из упущенных возможностей: в оригинальном даташите на AY-3-8910 упоминался некий второй бит громкости огибающей, но в железе его не было.
Вроде бы больше музыки было для SID, около 55 тысяч композиций, тогда как у AY порядка 30 тысяч. Но это не точно, я давно не следил за ситуацией. С коммерческими играми ситуация сложнее: SID был только на C64, а AY на десятках компьютеров и в некоторых аркадах. Тут скорее преимущество на стороне AY.
в оригинальном даташите на AY-3-8910 упоминался некий второй бит громкости огибающей
Это не тот случайно, который потом "вылез" в ямаховской копии чипа и стал предметом тучи холиваров?
Нет, это ещё один бит в регистре громкости. Там нижние 4 бита прямая установка громкости и 4-ый - включение аппаратной огибающей, и в том же регистре в даташите был ещё 5-ый бит. В YM2149 другая история, там 5-битные ЦАПы для более плавной работы огибающей (меньше ступенек при затухании и нарастании). Хотя может быть какая-то связь действительно есть.
Крутая статья, как и всегда. AY так и не смог вытеснить биперную музыку из моего сердца, у неё своё неповторимое, математически единственное очарование.
Насколько помню, если в качестве PC спикера использовать обычный динамик от радиоприемника, то его диффузор обладал инерционностью, сглаживал импульсы, и звучало на слух приятнее. Современные ноутбучные динамики или кварцевые пищалки воспроизводят звук точнее, но звучит из-за этого хуже, с высокочастотным "звоном"...
Статья оч. крутая, автору респект!
Но просто замечу, что это (был) не единственный метод формирования полифонии. Для пары-тройки каналов вполне можно практически точно так же давать почти нормальную синусоиду, если давать импульсы с нормальной 50% скважностью, а не вот это вот всё. Вот например 2-3 канальный звук из игрушки 1986 года: https://www.youtube.com/watch?v=Fg5msRZvv_8
Да, конечно, есть и другие способы. В указанной игре используется самая простая и популярная процедура Марка Александра из редактора Wham The Music Box. Там всего два канала тона, 50% меандр, без громкости (с небольшим разбалансом) и прочих эффектов. Работает максимально просто: чередуем выводы каждого канала в бипер с частотой выше слышимого диапазона. Но уже на двух каналах даже на реале слышен некоторый звон (несущая), а на трёх каналах это большая проблема. И такие движки очень чувствительны к стабильности таймингов и перерывах в синтезе для логики плеера. Поэтому на этом принципе более 3 каналов не делают. Я сам использовал его в упомянутых в статье движках Phaser (2 канала с модуляцией) и Tritone (3 канала с управлением скважностью и разбалансом громкостей).
Про синусоиду в The Music Box, конечно, речи не идёт, но разработки последних лет показали, что и её аппроксимация возможна. И не только её, но даже и вполне настоящих LP/HP фильтров. Но это уже полное математически-кодовое безумие, и на пальцах в посте его не разобрать. Зато так может звучать всё тот же бипер на Z80 и 3.5 МГц.
Помню, еще на реальном Спектруме как-то достал этот Wham, потыкался в него буквально полчаса и забросил. Как-то не произвело впечатление то, что на нем можно реализовать. Не помню, в какой известной игре была на нем музыка сделана, но даже близко ничего похожего по звучанию сделать не получилось.
Помню, была какая-то версия Tetris (не Tetris 2) с похожей 2-голосой биперной музыкой, но она и то приятнее звучала.
И не только её, но даже и вполне настоящих LP/HP фильтров. Но это уже полное математически-кодовое безумие, и на пальцах в посте его не разобрать. Зато так может звучать всё тот же бипер
Если честно, не очень понятно, где в этом звучании вполне настоящий LP/HP-фильтр. Скорее, синтез звуков, в части которых высокочастотных гармоник больше, а в части меньше. Это с натяжкой можно назвать LP-фильтром, а HP-фильтра здесь вообще нет. HP-фильтр обрезает низкие частоты, а в этой демке они все время присутствуют. Возможно, надо знать, что под капотом у этого движка, чтобы стало понятнее, о каких фильтрах речь.
Кстати, по поводу низких частот на бипере. На эмуляторах да в наушниках с выхода звуковой карты низкие частоты слышны хорошо, но на реальном Спектруме с бипером-пищалкой низких частот почти нет. Возможно, поэтому в 90-е у меня биперная музыка вызывала некоторое отторжение. Помню, когда запустил первый раз игру Agent X, музыка на заставке вызвала реакцию "это что вообще такое было?", а вовсе не восторг.
На эмуляторах да в наушниках с выхода звуковой карты низкие частоты слышны хорошо, но на реальном Спектруме с бипером-пищалкой низких частот почти нет. Возможно, поэтому в 90-е у меня биперная музыка вызывала некоторое отторжение.
А как же динамик телевизора?
У оригинального Спектрума такой прикол, нет выхода звука наружу. Только встроенный маленький, очень тихий динамик. Для него даже продавались специальные прибамбасы, типа колонки с усилителем. А у некоторых отечественных клонов другой прикол, пьезоэлемент вместо динамика - на таких музыка в Agent X звучит как шум.
Хороший вопрос. У меня оригинального Спектрума не было, только пара клонов. Пытаюсь вспомнить, куда в них выводился звук бипера - вроде бы, на встроенный динамик, но не на телевизор - в нем был только самопальный вход RGB.
Вот выход AY был точно выведен на внешний усилитель, в качестве которого использовался виниловый проигрыватель Вега-104, и звук в колонках был просто отпад (я не преувеличиваю), с очень сочными, но аккуратными низами. Демки вроде Song in lines я мог часами по кругу слушать.
О, у вас попонятнее вышло описание принципа действия, однако. Не так давно тоже писал статью про биперщину, не на спектруме, правда — надо будет ссылочку поставить на здешнее описание :-)
Спасибо, чувствуется что с любовью писалось.
Апогею в этом отношении повезло =) у него был ТРЕХ! канальный биппер ) не так давно с удовольствием пробовал подобрать под него музыку (без музыкального слуха тяжелова-то, но более менее звучит =)
н о вообще разрабатывать музыку под бипперы - это адский труд имхо =) тут нужно иметь безграничную любовь к музыке
Апогей =) звук на ВИ53
Спасибо, не часто такие статьи попадаются, это как теорема Ферма ) толку от неё ноль, только одно сплошное удовольствие )
Интересно, как делают визуализацию биперной музыки в роликах на ютубе? Визуализация музыки для AY хотя бы понятно, на чем основана: сгенерировать прямоугольные импульсы, сложить их и нарисовать результат с каким-то масштабом по горизонтали - тут хотя бы более-менее понятно, как это сделать. А как можно визуально "сэмулировать" колебания звука с бипера? Как в ролике с музыкой Electric B12 в этой статье, например.
Ещё мне таки не очень понятно, каким образом в биперных движках реализовано изменение громкости? Просто изменением длительности коротких импульсов - чем он дольше, тем громкость выше? Но ведь это влияет не только на громкость, но и на частотную окраску звука, насколько я понимаю - скважность при этом тоже изменяется, так ведь?
Скрипт также реализует экспорт данных наружу: ассемблерный исходник с данными музыки или собранные файлы популярных форматов (AY, TAP, SCL).
Мне вот интересно, а как биперная музыка конвертируется в формат AY - это же формат для воспроизведения на чипе AY? В нем же музыка играется фрагментами по 20 мс, но тогда получается, что какой угодно биперный звук так сыграть нельзя?
И ещё вопрос не про биперы. Музыка для чипа AY основана на том, что значения регистров изменяются в прерываниях с частотой около 50 fps, т.к. обычно она играется из процедуры обработки прерываний IM2. Есть ли на Спектруме какие-нибудь демки или музыка на заставках игр, в которой значения регистров изменяются с более высокой частотой? Я помню, что есть некая демка от Max Iwamoto, в которой на чипе AY играется отсэмплированная композиция Metallica, но такое было интересно в 90-х годах, и тогда это звучало круто, но сейчас качество такой музыки, прямо скажем, не очень-то восхищает.
Есть ли примеры "промежуточных" вариантов, когда, например, какие-нибудь арпеджио или другие музыкальные эффекты играются с более быстрым изменением нот, чем 50 нот в секунду - 100 или 200 в секунду? Как я понимаю, для реализации такого нужно применять изменение регистров AY не из прерываний, а выдерживая паузы с помощью команд самого Z80, примерно как в биперных движках.
Но ведь это влияет не только на громкость, но и на частотную окраску звука, насколько я понимаю - скважность при этом тоже изменяется, так ведь?
Да, при изменении скважности меняется и громкость и тембр
Про визуализацию я не знаю, пока не занимался этой темой.
Да, изменение ширины импульса меняет окраску звука, тембр, так как возникает иной набор гармоник. Это заметно на слух, чем выше эта «громкость», тем звук жирнее. Но это неизбежный компромисс, чтобы получить хоть какой-то контроль громкости, и придаёт определённый характер звучанию.
Формат AY не обязательно работает пакетами по 1/50 секунды, там можно просто запустить зацикленный код, и он будет корректно играть. Поэтому собственно и возможно помещать туда биперную и цифровую музыку.
Да, повышенная частота обновлений регистов AY практиковалась на других платформах, в особенности широко на Atari ST, где были придуманы различные модуляционные эффекты, подобные биперным, но для каналов AY. На ZX были демки, играющие такую музыку, хотя насчёт частоты основного обновления не уверен. Также была экспериментальная версия AY-трекера под 100 или 200 Гц, точно не помню ни параметры, ни названия. В голове крутится что-то типа PSM.
Эту демку я видел, интересно бы узнать хоть какие-то подробности про то, как это всё реализовано. Особенно про это:
Can't be used in Russian clones because of processor and ULA timings
Только на фирменном Спектруме с правильными таймингами заработает? А на каком-нибудь Spectrum Next? Эту демку можно где-нибудь взять в исполняемом виде (TAP, TRD)?
Интересно, как можно на AY сэмулировать переменную скважность. Её здесь действительно слышно - например, в сольной партии примерно с 1:00. Просто с большой точностью менять значение делителя частоты тона в определенные моменты времени, тщательно рассчитывая задержки исполнением циклов на Z80?
Я не вникал в код, но думаю, там просто включают-выключают маску тона в микшере AY, кодом, примерно похожим на биперный синтез. Проблемы с таймингами в том, что частота AY и частота процессора отличаются, просто будет нестрой между программными и аппаратными каналами. Но никаких принциальных препятствий для создания версии для отечественных машин нет.
Скорее всего канал с изменяемой скважностью просто полностью программный, мне так кажется. Это проще, чем синхронизироваться со счётчиком в AY, ведь неизвестно, в какой фазе он вообще находится.
Я помню, что смотрел демку в Unreal Speccy, но не помню, где брал. Сейчас найти её не представляется возможным из-за названия, было много чего с таким наименованием. Даже это видео еле нашёл.
Нашел вот такое обсуждение SID-плееров для Spectrum, но если я правильно понял, там это делается на двух чипах AY (turbo sound) и Z80, разогнанном до 14 МГц. Но там куча информации со всякими подробностями, в которых я мало что понимаю. Там же упоминается некий архив SID-музыки, в котором, и правда, больше 55 тысяч композиций, если я правильно понял.
Интересно, как делают визуализацию биперной музыки в роликах на ютубе?
О какой визуализации речь? Под музыку что-то рисуется? Можно рисовать что угодно от балды
А как можно визуально "сэмулировать" колебания звука с бипера?
Ничего эмулировать не надо, рисуем как есть осциллограмму
Забыл спросить про самомодифицирующийся код. Понятно, что это делается для максимальной производительности. А он на ходу прямо во время воспроизведения генерируется? Или в самом начале перед воспроизведением вся композиция целиком разворачивается в конечный код, который потом дальше уже исполняется и больше не изменяется? Если второе, сильно ли код увеличивается в объеме?
Код как правило модифицируется в парсере строк нотного текста. То есть, парсим строку, получаем параметры и модифицируем код в цикле синтеза, чтобы он синтезировал нужный звук (устанавливаем операнды в опкодах, или подменяем некоторые опкоды). Далее генерируем отрывок звука длительностью в строку, и потом на следующей строке код снова модифицируется. Внутри звукового цикла самомодификация применяется редко, просто потому что она не сильно-то быстрая.
Например, в движке wtbeep есть 32 разных тембра, которые генерируются 5-байтовыми фрагментами кода. В начале каждой строки движок смотрит, в каком канале какой тембр выбран, и собирает код из этих фрагментов, копируя их из заготовок в нужные места цикла синтеза.
Тоже добавлял в свой компьютер музыку:
https://youtu.be/3J76Rx2lqXQ?si=7xclEqz_rl9Qi0Cu&t=210
Но там стоял таймер ВИ53.
Cпасибо за статью. Это очень круто. Говорю, как программист, который сам писал для Спекки.
p.s. Любимый ковер Chronos. От этой штуки я тащусь одновременно как программист, и как гитарист.
Есть ещё неплохие ремиксы, хоть и не гитарные:
Наткнулся на свежий 6-канальный свежачок:
Судя по комментам, это Furnace, такой мультичиповый трекер. Там такой прикол: поддержка для многих есть, а экспорта нет. То есть это некая имитация того, что может быть и возможно, но на самом деле запустить и послушать на реальном железе это нельзя. Впрочем, utz успешно воссоздал для реального железа местный четырёхканальный движок Quad tone с очень похожим звуком. Но как-то привязать его к экспорту пока не получается.
А я Chronos прошёл! Раза три даже по кругу. Там после последнего уровня в первом опять летишь! Хорошая игрушка.
Кто Exolon, Eagles Nest, Robin прошёл - можно браться!
Секреты Тима Фоллина, бипер, Спектрум и QChan