Диджейский пульт для стрима
Пульт для алко-стрима: драм-машина, эффекты голоса живьём, дискотека в кадре. Всё считает браузер, платных вызовов нет. Растёт из движка «Песня из чата»: зрители, песни по заказу и кабацкие механики докручиваются сверху.
готовS1 · Пульт и дискотека13/13
Цель: Вести эфир можно на одном этом: бит играет, голос ломается, картинка пляшет. Без интернета и без денег.
планS2 · Зрители в кадре0/5
Цель: Зритель заходит с телефона за один снимок камеры и попадает в кадр реакциями.
В РАБОТЕS3 · Песни по заказу8/13
планS4 · Кабацкие механики0/3
Цель: Колесо фантов, челленджи, золотой микрофон вечера.
В РАБОТЕS5 · Twitch и домен1/3
В РАБОТЕS9 · Проверки по сроку0/1
Цель: Отложенные проверки, чтобы не выяснять через месяц, что не работает.
Ворклог (места остановки)
Второй заход по замечаниям с живого пульта. Найдено и починено: на боевой уехали песни из проверки (data/songs.json был под контролем версий), из-за чего карточки не проигрывались и счётчик врал — владелец решил, что не работает Suno; микрофон приходил двухканальным с сигналом только слева, и голос так и уходил в эфир из одного уха. Добавлено: пятнадцать голосов вместо семи, включая брутальный, диктора, хор и деда; караоке на ходу, где строки пишет модель, а бегут они в темпе бита с показом следующей. Проверки: 24 из 24 на пульте по боевому адресу, 21 из 21 на песнях и караоке.
→ Suno живьём по-прежнему ни разу не запускался: проверка на 20.08 в силе, теперь на чистом списке. Просьба владельца про голоса «как у актёров» требует отдельного разговора: живая подмена голоса моделью это GPU-сервер и задержка в доли секунды, на cfru видеокарты нет. Дальше по выбору: заказы песен от зрителей, караоке с таймкодами под готовый трек, кавер на спетое.
Разбор замечаний владельца после первого включения пульта и большой шаг по песням. Починено: микрофон не выключался; голос слышался дважды (дорожка вывода играла без выбранного устройства и складывалась с мониторингом); бурундук и дьявол пропадали, если браузер не дал обработчик высоты, теперь есть запасной способ и настоящая причина в консоли вместо догадки про Chrome; эхо бросает в повтор весь эфир, а не только голос; стоп пластинки тормозит и играющую песню. Добавлен микшер на три громкости. По песням: помощник пишет текст и описание стиля (два ключевых поля Suno), заказ уходит в полном режиме, появилась нарезка одного текста по кускам с разными жанрами и ценой пачки до запуска, добавлен callBackUrl и свой обработчик. Проверкой пойман баг, который в эфире выглядел бы как «полный режим не работает»: поле lyrics объявлялось дважды и пустое затирало присланный текст. Проверки: 24 из 24 на пульте по боевому адресу, 18 из 18 на песнях.
→ Настоящая генерация Suno по-прежнему ни разу не запускалась: владелец пробует сам, проверка по сроку на 20.08 в силе. Путь до текстовой модели проверен через прокси на бесплатной модели (транспорт, разбор ответа, сборка полей) — платная не гонялась. Дальше: заказы песен от зрителей с телефона, караоке с таймкодами, кавер на спетое в микрофон, либо спринт 2 (QR и реакции в кадре).
Песня по заказу и выкат на боевой адрес. В пульте появилась панель песни: тема, жанр, без слов; заказ виден в списке с честным состоянием. Ловим потоковую ссылку Suno, поэтому петь можно примерно через минуту, а не через три. Трек идёт через мастер вместе с битом и отдаётся со своего адреса, поэтому дискотека пляшет под него, а название видно на сцене. Расход считается на каждый заказ. Выкачено на https://myvisionagency.ru/pult (cfru /opt/pult, pm2, порт 3180, префикс через BASE_PATH). Поддомена нет: записи в DNS не существует. В nginx обязательный ^~, иначе regex-location для js и css перехватывает скрипты пульта. Попутно вынесены бэкапы конфигов из sites-enabled: nginx подключал их как второй серверный блок на тот же домен. Проверки: 20 из 20 по боевому адресу, 11 из 11 на подставном Suno.
→ Владелец пробует первую настоящую песню сам, гейт на трату он не снял: путь до живого Suno ни разу не прогнан, заведена проверка на 20.08. Дальше по выбору: заказы песен от зрителей с телефона, караоке с таймкодами, кавер на спетое в микрофон, либо спринт 2 (QR и реакции в кадре).
Заведён проект из присланного архива pesnya-stream. Спринт 1 закрыт: пульт /dj и сцена /stage поверх существующего движка песни. Драм-машина из восьми синтезированных ударных, секвенсор с забеганием вперёд, семь эффектов голоса живьём со своим питч-шифтером, мастер-секция, дискотека на canvas, вывод звука в выбранное устройство. Написана проверка настоящим браузером: 20 проверок, все зелёные, ритм сверяется по миллисекундам через рендер в буфер. Попутно починены два бага исходного движка: атрибут hidden проигрывал классу с display (тейковер висел поверх оверлея весь эфир), и npm start не читал .env (ключ админки оставался change-me).
→ Владельцу: поставить VB-CABLE, открыть /dj, погонять руками и сказать, чего не хватает в живом эфире. Дальше спринт 2 (зрители в кадре: QR, реакции, градус вечера) либо сразу спринт 3 (песни по заказу через Suno) — что окажется важнее после первой примерки. Перед первой генерацией показать расход и спросить подтверждение.