CLJS-Karaoke-Client
Игрок веб -караоке, реализованный в Clojurescript
Демо
Rolling Stones - все время
Описание
Моя попытка сделать приличного игрока караоке. В течение многих лет я с небольшим успехом пытался получить хорошее программное решение для караоке, основные альтернативы - это такие игры, как Ultrastar, Frets on Fire, и т. Д., Или, либо составляя плейлист на видео караоке YouTube.
Обе альтернативы предлагают широкий каталог песен, к которым вы можете свободно получить доступ через Интернет, но с некоторыми недостатками:
- Песни, доступные в Интернете для таких игр, как Ultrastar чаще, чем не используют оригинальный трек песни с вокалом, который, на мой взгляд, вроде как убивает "караоке -опыт"
- Синхронизация текстов сильно варьируется (некоторые только что отображают целые стихи одновременно, в то время как другие имеют текст, синхронизированные на уровне слога) при использовании видео караоке на YouTube.
Основная трудность заключалась в том, чтобы получить текст с синхронизацией, я нашел много файлов MIDI в Интернете, по -видимому, использовалось для караоке -машин. Эти файлы содержат тексты, синхронизированные до уровня слога. Поскольку на самом деле нет стандарта в хранте текстов в MIDI -файлах для караоке -машин, у многих есть тонкие различия в том, как они хранятся, поэтому, когда я анализировал эти файлы, я сделал кучу грубых допущений и извлекал тексты, чтобы отдельные файлы вместе с данными о времени. Большинство в порядке, но многие из них немного отключены от переменной смещения
MIDI Parser находится на отдельном проекте: CLJ-Karaoke.
Еще одна трудность заключалась в том, чтобы получить аудио -трек песни, поскольку текст синхронизируется до аудио -трека MIDI, самая самая самая вещь, которую можно было использовать. Первоначально я намеревался использовать файлы MIDI непосредственно для аудио -треков, но при воспроизведении звука качество сильно зависело от звуковых шрифтов, которые вы установили, и настройка хорошей Env для приличных результатов не является тривиальной задачей. Кроме того, если я хотел воспроизводить эти файлы на веб -клиенте, учитывая все это, просто сделало вещи более сложными. Поэтому я устроился с извлечением текстов в отдельные файлы и отдавая MIDI в MP3 -файлы, используя Timility, которая довольно удивительно, и я смог экспериментировать с различными коллекциями шрифтов.
Функции
- Тонны песен
- Фоновые изображения для песен динамически извлекаются из Интернета после поиска Google во время загрузки песни (если никто не кэширован)
- Каждый пользователь кэширует свой локальный фон и периодически подталкивает свои URL -адреса в Mongo DB, Google Custom Search имеет ежедневное ограничение, поэтому я стараюсь минимизировать его использование.
- Данные инициализации (лирики смещения, изображения BG) улучшаются во время сборки, консолидируя данные от пользователей
- Способность синхронизировать тексты с помощью смещения в Милисекундах (либо из панели управления, либо путем добавления строки запроса на URL)
- Автоматический плейлист, построенный из ранее синхронизированных песен
- Экспортная информация о синхронизации локальной песни, так что она может быть объединена с серверными данными синхронизации
- Экспериментальный звуковой ввод для настольного Firefox и Chrome с Live Echo/Reverb Sound FX (используйте внешний микрофон для достижения наилучших результатов)
- Экспериментальная запись веб -камеры и экспорт видео в файл webm. Аудиоканал в экспортируемом видео является результатом смешивания ввода микрофона с эффектами и треком песни.
- Дистанционное управление. Запустите приложение на большом экране и управляйте воспроизведением от другого экземпляра приложения (например, с вашего мобильного устройства!)
- Создайте страницы песен с предварительно-продавцами с помощью SEO-тегов, чтобы вы могли поделиться ссылками в социальных сетях как красивые карты с названием песни и изображением, если доступно.
- Редактор текстов для синхронизации новых треков с текстами.
- Выберите аудиофайл
- Добавьте текст, разделите его на слоги (или просто случайные куски)
- Воспроизведите свой трек и нажмите кнопку «Синхронизация» для каждой части
- Если вы хотите большую точность, вы можете замедлить трассу, уменьшая частоту воспроизведения
Работая над
- Динамические размеры шрифтов, уже оптимизированные размеры шрифтов для названий песен, но я также ищу способ улучшить дисплей текстов.
- Способ запечатлеть индивидуальные тексты, сметающие от всех пользователей, интегрируя их как значения по умолчанию в последующих выпусках
- То же самое с фоном песен, в настоящее время Google Custom Search используется для поиска изображений, связанных с названием песни, есть квота для этой услуги, и он довольно низкий, тем меньше нам нужно искать лучше.
Бег на местном уровне
Предварительные условия:
$ npm i -g shadow-cljs
$ npm install
$ shadow-cljs watch app
Если вы хотите собрать сборку релиза, вы можете запустить следующее:
$ shadow-cljs release app
Сборка будет расположена в /public каталоге.
Ключевые привязки
- "ESC": остановите воспроизведение
- "LR": Load Song
- «Alt-O»: включить оптоны в режиме воспроизведения
- «Alt-H»: включить режим панели управления
- "Left": звук ищет назад
- "Правильно"
- «Meta-Shift-L»: режим петли (в настоящее время в настоящее время работает)
- "Alt-Shift-P": игра
- "Сдвиг Право": Следующая песня на плейлисте
- "TT": Toasty!
- "H": Показать чит -лист
Будущая работа
- Raspberry Pi Image
- Тексты песен Sync Editor