Есть отдельная категория энтузиастов, которых завораживает идея проигрывать полноценный звук через однобитный бипер. Один из них уже проделал этот трюк на Apple II и IBM PC, а теперь взялся за ZX Spectrum — машину, особенно близкую пользователям из СНГ, где её клоны вроде «Ленинграда» и «Пентагона» стояли едва ли не в каждом втором доме.
Однобитный звук на ZX Spectrum: весь синтез ложится на процессор. Источник изображения — hackaday.com
Почему результат оказался скромнее ожиданий
Итог пока получился не таким чистым, как на предыдущих платформах, — но кое-что заработало. Важнее другое: автор документирует каждый шаг, и на разумных неудачах порой удаётся научиться большему, чем на неправдоподобных успехах. Разбор того, почему приём не сработал, обычно объясняет архитектуру машины лучше любой документации.
PCM против PWM
Вся затея опирается на импульсно-кодовую (PCM) или широтно-импульсную (PWM) модуляцию. Из двух техник более качественный результат должна давать PWM, но именно её пока запустить не удалось. Причина архитектурная: на ряде целевых машин пищалку дёргает отдельный аппаратный таймер, а у Spectrum всё держится исключительно на программном коде.
Из этого следует жёсткое ограничение: процессор Z80 на 3,5 МГц должен успевать переключать бит порта строго по расписанию, и любая лишняя инструкция в цикле смещает фронт импульса, добавляя в звук слышимый шум. Отсюда фирменный приём демосцены — развёрнутые в линейную последовательность циклы, где такты считаются вручную.
Отдельная сложность Spectrum, которую хорошо знают все, кто писал под него, — контеншн памяти: обращения к нижним 16 килобайтам ОЗУ притормаживаются видеоконтроллером, и тайминги плывут. Поэтому звуковой код и его данные приходится держать в верхних банках памяти.
Многоканальная музыка на одном бите
Получение многоканального звучания потребовало отдельного алгоритма, и его разбор читается едва ли не интереснее основной части. Классический подход здесь — быстрое чередование каналов на одном выходе: ухо усредняет переключения и слышит несколько голосов там, где физически есть один бит. Именно так работали легендарные движки вроде Octode и Phaser1, вытягивавшие из бипера до восьми каналов.
PCM, разумеется, не новость. Но между современным ЦАП и пищалкой на 1 бит лежит целая эпоха инженерных ухищрений, и наблюдать, как эти ухищрения переоткрывают заново, — отдельное удовольствие. Работа продолжается, так что имеет смысл следить за следующими выпусками.
Практический смысл у затеи тоже есть: наработки по однобитному синтезу применимы к любым устройствам, где из звуковых возможностей — только один вывод микроконтроллера. Дешёвая пищалка на ATtiny или на ESP32 с таким кодом внезапно начинает играть мелодии вместо унылого писка.











