Visaginas360 · эксперимент

Три минуты техно
из 36 килобайт кода

Ни одного сэмпла. Ни одного плагина. Ни одной 3D-модели. Звук синтезируется формулами, картинка вычисляется на видеокарте. И то и другое растёт из одной сетки времени — поэтому они не могут разойтись.

Сетка · 16 шагов на такт 120 BPM · такт 1/96
KICK
CLAP
HAT
BASS
ARP
SUB

Это не иллюстрация. Ровно эти строки лежат в core.py и порождают и звук, и видео.

Результат

96 тактов, 5760 кадров

До минор, прогрессия i–VII–VI–VII, 120 ударов в минуту. Вертикальный кадр 1080×1920 — под ленту, а не под монитор.

Полный цикл на домашней RTX 3060 занимает 128 секунд: 76 секунд рендер, 16 проверка, остальное — публикация.

Каждый запуск даёт новый трек. Тональность, гармония, темп, рисунок арпеджио и цвет выбираются из числа-семени. Один и тот же номер всегда воспроизводит один и тот же трек.

3:12
длительность
2 073 600
лучей на кадр
23.3 dB
динамика
0
сэмплов и моделей
Отправная точка

Ролик в ленте

Всё началось с чужого видео — про Эрика Прайдза. Ролик изрядно преувеличивал: нет, Прайдз не изобрёл мелодик-техно, этот жанр вырастили итальянцы Tale of Us и их лейбл Afterlife.

Но одно было правдой. Как автор аудиовизуальных шоу Прайдз действительно идёт впереди всех. С 2011 года он делает серию EPIC — Eric Prydz In Concert. В 2018-м появился HOLO, в 2019-м — Holosphere: прозрачная сфера восьми метров, 2.4 миллиона светодиодов, пять тонн, диджей внутри. Отыграла ровно один раз — между уик-эндами Tomorrowland сцена под ней обрушилась.

А в 2024-м на Coachella он вышел b2b с Anyma — это Маттео Миллери, половина Tale of Us, сооснователь Afterlife, тот самый, что потом занял Sphere в Лас-Вегасе.

Путь туда лежит через миллионы долларов оборудования. Вопрос был простой: а есть ли другой путь?

Главная идея

Звук и картинку никто не синхронизировал

Обычно визуал анализирует звук: слушает громкость, ловит биты, реагирует. Получается «почти попадает».

Здесь наоборот. Есть одна сетка времени — таблица событий в долях такта. Из неё выводятся и сэмплы, и кадры. Визуал никогда не слышит музыку. Попадание идеальное не потому, что подогнали, а потому что иначе быть не может.

# 120 BPM выбран не случайно: при 30 кадрах в секунду
# такт занимает ровно 60 кадров
SEC_PER_BAR = 2.0
assert abs(DUR * FPS - N_FRAMES) < 1e-6  # иначе шов на стыке

Проверка: корреляция между громкостью звука и яркостью кадра по тактам — 0.71. При том, что между ними нет ни одной строчки связи. Обе кривые независимо выведены из одной таблицы.

Сборка

Три файла

  1. core.py — сетка и синтез

    Аранжировка на 96 тактов генерируется из плана секций. Бочка — синусоида с падением частоты со 155 до 44 герц. Бас в три слоя: чистый саб, пила с октавными скачками, «риз» из двух расстроенных пил. Пад — семь расстроенных голосов на каждую ноту аккорда. Реверберация — свёртка с затухающим шумом.

  2. render.py — вычисление картинки

    В видеокарту не загружено ни одной вершины. Каждый пиксель сам идёт лучом сквозь поле расстояний и ищет поверхность. Форма перетекает между двумя минимальными поверхностями: плотным гироидом в дропах и открытым Schwarz-P в брейкдауне. Мягкие тени, ambient occlusion, свечение, хроматическая аберрация.

  3. bot.py — автономный цикл

    Выбрать семя, отрендерить, проверить, опубликовать, записать в реестр. По расписанию, без человека.

Автономность

Робот не верит рендереру

Готовый файл декодируется обратно и измеряется. Не прошло по яркости, динамике или пиковому уровню — в карантин, а не в публикацию.

GATE = {
  # картинка
  "max_black_frames": 3,      "min_mean_luma": 8.0,
  "max_blown_pct": 0.05,
  # звук
  "min_audio_rms": 0.03,      "max_audio_peak": 0.99,
  "min_dynamic_range_db": 6.0,
}

Принцип простой: проверять только по измеримым сигналам. Не по тому, что программа сама о себе сообщила.

Кто это делает

Честная часть

Я не программист звука и не 3D-художник. Инженер-строитель, который последние годы занимается инфраструктурой и автоматизацией.

Весь этот код написан в диалоге с искусственным интеллектом. Я объяснял, что хочу услышать и увидеть, спорил, проверял цифрами и переделывал.

И вот что зацепило по-настоящему. Это не «нейросеть сгенерировала видео» — здесь ни один пиксель не сгенерирован нейросетью.

Здесь ИИ выступил инженером, который знает цифровую обработку сигналов и шейдеры. А я — заказчиком, который знает, чего хочет, и умеет проверить результат.