Когда-то жило юное поколение, которое выбрало DOS Navigator, научилось форматировать дискеты в нестандартный объем 1,66 мегабайта и задорно валить плюющихся плазменными шарами какодемонов. Но канули в небытие Sound Blaster 64, 3dfx Voodoo2 и гигантские жесткие диски объемом 40 мегабайт. Остались только горы флоппи-дисководов, которые по старой памяти еще долго ставились на компьютеры. Хотя уже и были никому не нужны. Их время вернулось в 2015 году, когда поляк Павел Задрожняк собрал первый полифонический флопотрон. Совместно с инженерами «Авито» редактор N + 1 Василий Сычёв разобрался, как устроен и работает этот «оркестр», и собрал свой собственный флопотрон.
В 1991 году компания Ritlabs выпустила файловый менеджер для операционной системы DOS, в который была встроена утилита форматирования с расширенными настройками. Она позволяла отформатировать любую стандартную 3,5-дюймовую дискету таким образом, что на ней информация записывалась уже на 83 дорожки. Объем дискеты увеличивался с 1,44 до 1,66 мегабайта.
Во время работы — при записи или чтении — флоппи-дисководы производили характерные гудение, жужжание и щелканье. Эти звуки издавали два типа электромоторчиков: один — шаговый — отвечал за перемещение каретки с двумя магнитными головками (они-то и намагничивали напыление на гибком диске при записи или измеряли изменение магнитного поля при чтении), а второй — бесколлекторный — за вращение самого гибкого диска дискеты. При использовании одновременно нескольких дисководов шум стоял запредельный.
Надо признать, что еще до появления знаменитого флопотрона Павла Задрожняка (устройства воспроизведения музыки с помощью 64 флоппи-дисководов, восьми жестких дисков и двух планшетных сканеров), энтузиасты уже использовали дисководы для проигрывания простых мелодий. Благодаря дешевым микроконтроллерным платам вроде ******* или Raspberry Pi, появившимся в 2010-х годах, решить эту задачу стало в целом несложно: требовались лишь умения программировать и паять, а также усидчивость
Музицируем
Ура. Все заработало. Настало время сыграть на флопотроне какой-нибудь простой мотивчик. Для этого выбрана заглавная мелодию из «Собаки Баскервилей», двух серий советского сериала «Приключения Шерлока Холмса и доктора Ватсона», снятого в 1980-х годах. Эта мелодия крайне проста (состоит всего из 72 нот), и ее просто закольцевать (музыка будет вечной, если не выключить рубильник).
При написании «программы Баскервилей» нужно было учесть несколько моментов. Во-первых, нужно помнить, что шаговый двигатель может перемещать каретку лишь на 160 шагов в одном направлении, а затем в другом. Таким образом, при проигрывании мелодии рано или поздно наступил бы момент, когда каретка дошла до предела.
Во-вторых, нужно понимать, что шаговые двигатели изначально не созданы для воспроизведения музыки, поэтому им доступен ограниченный набор нот. Ноты, выходящие за возможности двигателей, просто будут не слышны — каретка сдвинется, а звука почти не будет. Для решения этой проблемы проведено ряд экспериментов. В итоге частота шагания двигателя представляет собой результат математических действий — деление подобранного опытным путем числа на частоту определенной ноты с делением же результата на два.
Наконец, в-третьих, при крайних положениях каретки (в центре или с краю) она будет биться об ограничители, создавая неприятный дребезг.
Сначала определяются константы, указывающие контакты ******* UNO, через которые будет осуществляться управление дисководом. Затем с помощью той же директивы указываются константы нот, которые используются в мелодии.
Сама мелодия записана в двух массивах: note[] и duration[]. Первый массив хранит ноты, а второй — их длительность (для размера 4/4).
В самой процедуре вычисляется частота «топтания» каретки, длительность ноты в миллисекундах (сколько именно по времени с заданной частотой каретке нужно делать шаги вперед-назад). В процедуре объявлен цикл while, в теле которого и записан код, управляющий движением каретки и направлением вращения шагового двигателя. Один полный цикл — одна нота. После выхода из цикла программа приостанавливается на пять миллисекунд — это пауза между нотами. Вот так все просто.
Флопотрон
Эту простенькую программу можно немного расширить, чтобы она проигрывала мелодию на нескольких дисководах. При этом на простом процедурном уровне добиться полифонии не получится. Дело в том, что ******* исполняет код построчно, причем в один момент времени выполняется только одна команда.
Соответственно, если мы говорим, что нужно переместить каретку первого дисковода, одновременно переместить каретку второго уже не получится. Это ограничение можно обойти, если опуститься на так называемый низкий уровень — ******* позволяет управлять состоянием выводов не только с помощью директив и команд, но и напрямую.
В midi-файле содержаться одна или несколько дорожек с записям нот для разных музыкальных инструментов. Каждая из эти дорожек имеет свой номер канала для проигрывания. Именно основываясь на этом номере и распределяются проигрываемые ноты по дисководам. Таким образом ноты из канала 1 будет играть дисковод с номером 1, из канала 2 — с номером 2 и так далее. При этом в программе в отличие от простенькой программы, ведется подсчет шагов шаговых двигателей, благодаря чему каретки ездят вперед и назад при проигрывании музыки.
Был построен полифонический флопотрон из четырех дисководов с использованием программного обеспечения Moppy. Изначально планировалось, что жесткий диск будет выступать в роли барабана, выстукивая ритм. Однако мощности собственных портов ******* UNO не хватило, чтобы раскачать звуковую катушку головки жесткого диска. Соответственно пришлось бы применить вторую плату ******* UNO и драйвер шаговых двигателей, что усложнило бы проект. Одна ******* UNO с Moppy не может одновременно управлять дисководами и драйверами шаговых двигателей. Да и как-то непрактично задействовать вторую микроконтроллерную плату для всего лишь одного жесткого диска.
Когда был получил готовый флопотрон, в первую очередь проверена скорость реакции шаговых двигателей дисководов. Для этого с помощью программы Speedy MIDI из табулатурной записи для гитары мелодии «Полет шмеля» создан midi-файл, который и «кормил» Moppy. Дисководы отработали замечательно.
После проверен нотный диапазон шаговых двигателей. Для этого в программе Guitar Pro написана простая мелодия с партиями для двух гитар, раскрашенная ее бендами, пулл-оффами, хаммер-онами и слайдами. Послушать ее так, как она задумывалась, можно здесь.
https://www.youtube.com/watch?...
https://www.youtube.com/watch?...
https://www.youtube.com/watch?...
Флопотрон же при проигрывании ожидаемо растерял часть нот, которые игрались подтяжкой струн или скольжением.
Из-за музыкальной ограниченности шаговых двигателей нельзя просто так взять и проиграть на флопотроне первый попавшийся в интернете midi-файл. Его еще нужно будет адаптировать, подстроив под нотные возможности флопотрона.
Во время экспериментов оказалось, что лучше всего для флопотрона подходят 8-битные по своему звучанию мелодии из старых игр и фильмов. Адаптировать midi-файлы с этими мелодиями для флопотрона оказалось проще: лишние музыкальные инструменты (например, барабаны) просто выкидываются, а остальные объединится таким образом, чтобы на выходе получился midi-файл с четырьмя дорожками — по одной на дисковод.
Сегодня: Любовь Макся, Ирина К83, ДедПушин, L oleg, Игорь Воронежский, Ketty, Татьяна Касьянова, рабочий, Vika ezhevika, Удалённый аккаунт, itsyspro, Таисия, Юлия Солнцева, Михаил82, Lyunya, Ольгуня, Maks87
«В школу ходят 12 детей из 30!». Воронежцы бьют тревогу из-за ситуации в девятых классах
Легенду Воронежа не узнать. Горожанам показали на фото, как теперь выглядит Юго-Западный рынок
Воронежцы: большой микрорайон остался без отделения почты
«Атака, а дитя не забрать». Воронежанка рассказала, как ей не отдавали ребёнка во время взрывов