Дисководы и шаговые моторы уже использовались для создания музыки, но в плане живой игры эта технология ещё недостаточно освоена. Так что в этой статье я расскажу вам о своём опыте применения дисковода в моей сборке для генерации чиптюнов, подробно расписав технические нюансы этого процесса.
В видео выше показаны три компьютера Commodore 64 в разных цветах для лучшей наглядности. Мелодию я играю на тёмно-сером C64C (кастомный корпус от Individual Computers), а аккорды на коричневом “breadbin”. На этих машинах выполняется Qwertuoso, моя основанная на звучании аккордеона программа для C64, которая позволяет играть живую чиптюн-музыку. В качестве регулятора громкости я подключил внешний потенциометр.
Последовательность аккордов определялась музыкальными и техническими ограничениями: я старался подобрать такие аккорды, которые бы вписались в мелодию и при этом изящно расширили её гармоническую структуру – но мне также хотелось избежать комбинаций, вызывающих фантомные срабатывания клавиатуры.
В третьем компьютере, светло-сером C64C, для генерации звука не используется микросхема SID. Вместо этого, он контролирует двигатели программируемого дисковода, обеспечивая бас и ритмические звуки. Я специально снял с дисковода крышку, чтобы вы могли видеть его движущиеся части.
Пригодился здесь и кассетный накопитель 1530 Datasette.
Я уже демонстрировал Qwertuoso в других постах (Sixtyforgan, Monty On The 'Bin, Vocalise), поэтому здесь сосредоточусь на описании генерации звука дисковода. Основной принцип довольно прост, но при этом полученный инструмент обладает рядом чарующих особенностей.
▍ Упоительно мелодичный накопитель
Дисковод 1541-II продолжает оставаться популярным устройством для домашнего ПК Commodore 64. Он оснащён двумя двигателями: DC-мотором для вращения диска и шаговым мотором для позиционирования головки над нужной дорожкой.
DC-мотор можно включать/отключать программно, вызывая приятный шелестящий звук при его раскручивании или остановке. В работающем же режиме он издаёт довольно скучный и неинтересный рокот. В идеале в течение большей части перформанса этот мотор должен оставаться отключён. Правда, к сожалению, это невозможно, и вскоре вы узнаете почему.
Пока же давайте взглянем на куда более разнообразный источник звука – шаговый двигатель. За счёт манипулирования несколькими регистровыми битами можно поворачивать его ротор на точную величину. Это вращательное движение по проводу переводится в усилие прямолинейного движения, которое подтягивает считывающую головку на один шаг в сторону центра диска или к его краю. При этом мы непосредственно контролируем ориентацию магнитного поля, которое и движет физический ротор по кругу.
Магнитное поле изменяется очень быстро, но на ускорение ротора уходит несколько миллисекунд. В связи с этим в обычном рабочем режиме дисковод изменяет магнитное поле на один шаг, после чего недолго ожидает, давая головке время передвинуться к нужной дорожке. При опускании на диск головка издаёт характерный «щёлкающий» звук.
Но представьте, что мы быстро переключаемся между двумя положениями. Вращая магнитное поле, мы активизируем перемещение головки, но прежде, чем она достигнет заданной позиции, мы отправляем её уже в другом направлении, потом обратно и так далее. Поскольку она никогда окончательно на дорожку не садится, щелчка не происходит, но вибрация самой головки создаёт звуковую волну, которую мы слышим.
Высота этого звука регулируется скоростью вращения магнитного поля. Но, когда мы в конечном счёте это вращение прекращаем, головка всё же садится на дорожку, издавая тот самый щелчок. Можно ли как-то избежать этого щёлканья в конце каждой ноты?
Напомню, что DC-мотор при вращении издаёт постоянный рокот. К сожалению, для наших целей сам дизайн 1541 не даёт возможности перемещать шаговый мотор, не задействуя мотор DC. Я уже говорил, что последний можно включать и отключать программно, но при этом можно более точно активировать/деактивировать всю двигательную систему, подавая питание сразу на оба. В результате перед нами на выбор два основных варианта действий: либо оставлять DC-мотор работающим в течение всего музыкального выступления, смиряясь с фоновым рокотом, либо же пытаться отключить его, насколько это возможно, соглашаясь на возникающие при этом шелестящие звуки.
В данном проекте я предпочёл второй вариант. Беспорядочные звуки раскручивания и замедления отлично вписываются в общее клавиатурное клацанье, но есть и более весомая причина: при выключении питания DC-мотора, а значит, и шагового, в конце каждой ноты ничто не вынуждает головку двигаться. В отсутствии сильного магнитного поля она спокойно замедляется в собственном темпе и щелчка не издаёт.
▍ Громкость и тембр
Генерируя тоны с помощью шагового мотора таким образом, мы не имеем прямого контроля над громкостью каждой ноты. Тем не менее сам принцип работы «инструмента» предполагает большой разброс громкости. Во-первых, чем ниже частота вращения, тем дольше головка перемещается до момента, когда её потянет обратно. Ну а раз она проходит бОльшее расстояние, то и амплитуда генерируемой ей звуковой волны возрастает, то есть громкость увеличивается.
При определённой высоте звука даже корпус дисковода начинает резонировать.
Более того, в диапазоне нижнего баса скорость изменения магнитного поля оказывается достаточно низкой, чтобы головка успевала сесть на диск после каждого перемещения, по крайней мере, в некоторой степени. Это приводит к быстрой серии щелчков, напоминающих нечто среднее между механическим треском и музыкальной нотой. Такой грубый звук знаком всем, кто использовал дисководы в их обычном режиме: он слышен всякий раз, когда головке для достижения нужного сектора с данными требуется перескочить несколько дорожек.
Разница в том, что во время загрузки все эти шаги предпринимаются в одном направлении, но в нашем случае головка перескакивает туда-сюда между смежными дорожками. Поэтому вдобавок к загрузочному треску мы получаем относительно тихий тон от колебаний самой головки.
В целом получается, что некоторые диапазоны звучат громче и грубее остальных. Подстроив музыкальную композицию под эту вариацию, можно в определённых рамках создать акценты и динамику.
Интересно, что положение головки также влияет и на тембр звучания. Звук при её быстром перемещении между, скажем, первой и второй дорожками, заметно отличается от того, который возникает при перемещении между второй и третьей, даже при одинаковой высоте тона.
В моей программе клавиша стрелки влево (под левую руку) генерирует щелчок тем, что позволяет головке ненадолго остановиться, прежде чем возобновить движение и продолжить издавать удерживаемую ноту. Но поскольку вращение начинается уже с другой позиции, тембр этой ноты до и после щелчка отличается. В ролике есть пассаж, начинающийся с 0:31, где можно услышать этот эффект, используемый для привнесения вариативности в басовую ноту постоянной высоты.
▍ Запись и микширование
В этом проекте я позволил себе увлечься микшированием в широком смысле, доработав каждую запись с помощью эквалайзера, компрессии и реверберации. В итоге композиция получилась чуть попсовее типичного чиптюна, но характерный 8-битный звук всё равно выделяется.
С дисковода я снимал звук двумя способами. С помощью стандартного петличного микрофона, просто подвешенного над его краем, и с помощью пьезодатчика, прикреплённого к корпусу и подключённого к самодельному предусилителю. Эти два микрофона дают несколько отличающиеся записи, которые при микшировании объединяются на разных уровнях и распределяются по стереоканалам. Однако во второй половине видео используется только пьезодатчик, так как петличный микрофон закреплён у меня на рубашке.
В основе преда лежит операционник LMC662, подключённый как неинвертирующий усилитель с фактором усиления ~300 и питающийся от батареи 9В. Аналогичную сборку можно видеть в видео Sixtyforgan, где с помощью неё обрабатывается сигнал, возвращающийся от ревербератора. В принципе, пьезодатчик можно было подключить прямо в микрофонный вход рекордера, но длинные провода улавливают шум. Усиливая сигнал рядом с источником, мы сокращаем относительный уровень этого шума, в данном случае в 300 раз (или на 50дБ).
▍ Источник
Выбранную мной мелодию сочинил Иоганн Себастьян Бах в качестве первой части Партиты для скрипки №3 ми мажор (BWV 1006.1). Я добавил в неё бас и последовательность аккордов. Другие музыканты наложили на эту композицию бит – впервые я услышал это в “Bach Street Prelude” Ванессы Мэй от 1997 года.
▍ Скачать
Linus Akesson — Partita Prelude for 8-Bit Ensemble.mp3 (MP3, 7.6 MB)
Автор: Дмитрий Брайт