Написание бота для 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 для распознавания звука. Они мне очень помогли, и без них проект был бы невозможен! ❤️