Написание бота для Twitch, который автоматически определяет музыку, воспроизводящуюся в прямых трансляциях, с помощью ACRCloud
Это история моего проекта под названием Twitch Music ID, который изначально начинался как школьный проект, но быстро привлек внимание многих стримеров и теперь является частью более чем сотни каналов.
Технология, используемая в этом проекте
- ACRCloud
- Cloud Firestore
- Написано на TypeScript, работающем на Node.js
- Множество замечательных пакетов npm с открытым исходным кодом! 📦 ❤️
Соревнование
Как я уже упоминал, изначально проект начинался как школьный. В моей школе у нас была возможность поработать над проектом по нашему выбору в течение нескольких месяцев, а затем представить технологии, которые мы использовали позже, в конце учебного года, чтобы получить последнюю оценку.
Я большой поклонник видеоигр, а также люблю смотреть, как люди играют в них на платформе под названием Twitch.tv. Многие прямые трансляции транслируют музыку в фоновом режиме. Однако большинство из них не отображают текущую песню в своем потоке, что приводит к тому, что пользователи спрашивают в чате, какая песня сейчас играет. И чем больше у стрима зрителей, тем больше людей спрашивают. Так что я быстро нашел свою задачу:
«Создайте бота Twitch, который может обнаруживать музыку в прямых трансляциях».
Конечно, уже были другие боты, выполняющие аналогичные задачи, такие как боты StreamElements или StreamLabs. Проблема с ними в том, что они подключены к учетной записи Spotify стримеров и используют Spotify API для получения текущей воспроизводимой песни. Это не работает, когда стример слушает музыку на любых других платформах, таких как YouTube Music или Deezer, что является большим недостатком. Я хотел создать бота, который может просто присоединиться к каналу и делать свое дело без особой или какой-либо дополнительной настройки.
Когда начать
Первый шаг при запуске нового проекта - это всегда быстрый «набросок». Таким образом, вы уже можете найти некоторые потенциальные недостатки, с которыми не столкнетесь позже, что может сэкономить вам много времени. Я говорю по собственному опыту. Я быстро решил написать чат-бота на TypeScript, так как я наиболее знаком с ним и скомпилирован на JavaScript, он может работать на сервере круглосуточно. Но я подробнее остановлюсь на этом позже. Вот как выглядел окончательный «набросок»:
Идентификация песни
Ключевой частью этого проекта является получение реальных песен из конвертированного файла mp3. Я сравнил в общей сложности четыре сторонних сервиса и обнаружил, что ACRCloud - самый надежный из них. Они предлагают множество функций, таких как API распознавания звука, который я использую для этого проекта. Их API анализирует данный mp3-файл и возвращает найденные песни за доли секунды и имеет лучший показатель обнаружения из 50 протестированных звуковых файлов, записанных из различных потоков.
Что оно делает
Глядя на приведенную выше блок-схему, вы можете задаться вопросом: «Почему между чат-ботом и API-интерфейсом ACR Cloud существует отдельный сервер API?»
Наличие отдельного сервера API между чат-ботом и API ACRCloud позволяет мне обрабатывать данные перед их передачей обратно чат-боту. Вот что происходит на сервере API при поступлении запроса от чат-бота:
- Загрузите данный звуковой образец в корзину для хранения
- Добавьте новую запись в базу данных, включая некоторые полезные атрибуты, такие как время получения запроса, пользователь, который его запросил, полное сообщение и т. Д.
- Сделайте новый HTTP-запрос к ACRCloud API, который затем обнаружит песни, которые может содержать образец.
после того, как ACRCloud ответит и вернет все найденные песни, сервер API
- Разбирает тело ответа
- Сохраняет найденные песни в базе данных (не сами песни, а только объекты, содержащие название песни, исполнителя, лейбл и т. Д.)
- Запрашивает API YouTube, чтобы получить ссылку YouTube на найденную песню.
- И, наконец, отвечает чат-боту, который затем снова отвечает пользователю коротким чистым сообщением, включая найденные песни.
И все это занимает примерно 0,5–0,75 секунды в среднем! (По истечении первых пяти секунд чат-бот прослушивает поток)
Настройки канала и обновления в реальном времени
Каждый стример индивидуален, и их чат тоже. Таким образом, целью бота было сделать его максимально настраиваемым. Я использую Googles Firestore в качестве основной базы данных, которая позволяет легко сохранять и извлекать объекты в формате JSON. Кроме того, вы также можете редактировать записи базы данных на лету в Google Cloud Platform Console , и приложения могут подписаться на эти изменения.
Это позволяет мне легко изменять конфигурации каналов в базе данных, а бот может мгновенно извлекать эти изменения и использовать их:
Конфигурация канала содержит:
- Название канала
- Период охлаждения (по умолчанию 90 секунд), в течение которого нельзя запрашивать песни
- Объект, содержащий различные форматы сообщений, которые различаются для каждого канала.
- Набор триггеров, на которые бот проверяет сообщения
Что касается messageTemplates
, бот заполняет все значения между знаками%, например %REQUESTER%
, соответствующими значениями.
Что впереди
Несмотря на то, что официальный школьный проект уже завершен и все уже сделано, запланировано еще много всего. Одна из основных функций - возможность добавить бота на любой канал через веб-панель управления, где вы можете войти в свою учетную запись Twitch и самостоятельно управлять конфигурацией бота.
Еще один большой шаг, который предстоит сделать в ближайшем будущем, - это часть чат-бота с открытым исходным кодом! 🎉
Вы уже можете найти репозиторий проекта на моем GitHub: 4dams / twitch-music-id.
Спасибо
На этом пока что почти все об этом проекте! Если у вас возникнут вопросы, дайте мне знать!
Вы также можете написать мне по электронной почте [email protected]
Я также хочу использовать эту возможность, чтобы поблагодарить всех, кто участвует в этом проекте. Особенно все стримеры, которые позволили мне запустить этот проект на своем канале: RATIRL, ROSHTEIN, Kurttens, linnuwu, ParnstarZilean, RANGERZX, xArmin, Kattawina_ и многие другие…
Также большое спасибо людям из ACRCloud за то, что они предлагают такую отличную платформу и API для распознавания звука. Они мне очень помогли, и без них проект был бы невозможен! ❤️