Telegram вместо студии звукозаписи: как я создал бота для мобильных музыкантов (2024)

Telegram вместо студии звукозаписи: как я создал бота для мобильных музыкантов (1)

Привет! Я Виктор, проектный менеджер в Selectel. Последние 20 лет мое хобби — написание музыки. Выходит с переменным успехом (писать музыку, конечно), но это часть моей жизни. Сначала был Fruity Loops 3, потом Reaper, но душа всегда тянулась к «железу» и новым технологиям.

Под катом — история pet-проекта, который призван упростить жизнь мобильным музыкантам. Либо заставить технических специалистов сказать *meh* («До» малой октавы). Осторожно — внутри нейронки, музыкальное «железо» и плохой код на Python.

Используйте навигацию, если не хотите читать текст полностью:

Идея
О принципе работы Stem Splitter Bot
Что использовали
Сколько нужно ресурсов
А что дальше?

Идея


В январе 2024 года прошел слух, что вот-вот в AKAI MPC Live появится разделитель на STEMS (акроним от Stereo Masters) — изолированные аудио-дорожки (ударные, голос, бас и прочее). Общественность была взбудоражена: теперь в дороге можно будет разделить трек, сразу его засемплить и стать немного счастливее.

Реальность оказалась суровее. В начале 2024 года компания зарелизила «разделитель» только в свой софт и уже который месяц дает обещания о расширении функциональности. Тогда же я задумался, можно ли такую функцию поместить в Telegram-бота.


UPD. Пока писал статью, AKAI выпустила MPC STEMS для Standalone-решений, но это нельзя назвать бескомпромиссным и универсальным решением.

Для кого

Для пользователей устройств Roland SP-404mk2 (у меня такой), Elektron Digitakt, DirtyWave M8 и прочих. Бот поможет музицировать в дороге и воспроизводить функции, которых в «железе» нет.

Вот, например, как вживую играет новосибирский музыкант Женя PNV
(это лайв: под футболкой рекордер, все в порядке):

Еще ниже — мой походный набор:

Telegram вместо студии звукозаписи: как я создал бота для мобильных музыкантов (2)


Сэмплер Roland SP-404MK2, наушники KZ ZSN Pro, USB-провод и стереопара 6.3-3.5 для подключения к телефону, powerbank на всякий случай.

Зачем, если есть софт в браузере

Есть, но сидеть со смартфона на сайтах типа lalal.ai или vocalremover.org просто неудобно. К тому же у них есть ограничения на длительность и количество треков в бесплатном тарифе.

Telegram вместо студии звукозаписи: как я создал бота для мобильных музыкантов (3)


Скриншот сайта lalal.ai.

Есть решение и для тех, кто не хочет пользоваться веб-версиями, — Koаla Sampler. Хороший софт, но стоит денег (от 450 ₽ единовременно). Многие творят на нем красоту, ведь это уже полноценная студия в кармане.

Как работают STEMS Koаla Sampler.

Зная все это, хотелось сделать «из кармана» проект без дополнительного софта. С этим может помочь Telegram, ведь он априори установлен на большинстве устройств.

Кто-то скажет: «Но ведь и боты уже есть». Тут все проще, чем кажется. На момент первого релиза я просто не встречал таких разработок. Да и хотелось создать pet-проект, разобраться в библиотеках и путях реализации.

О принципе работы Stem Splitter Bot


Telegram-бот принимает на вход любые файлы расширений mp3, ogg, wav, далее — предлагает список действий. Как вы понимаете, простым разделением на дорожки я не ограничился.

Telegram вместо студии звукозаписи: как я создал бота для мобильных музыкантов (5)


Скриншот из Telegram-бота Stem Spitter.

Кстати, на whosampled.com этот трек тоже есть — кто-то уже им вдохновился.

Пробежимся по функциям.

  • BPM — позволяет определить скорость (количество ударов в минуту) дорожки. Пригодится, когда в «железе» не реализовано автоопределение BPM.
  • Ключ — показывает тональность трека или дорожки. Помогает клавишникам или пользователям, которые используют chroma-режим на сэмплерах, чтобы играть сэмплом вживую.
  • MIDI — конвертирует дорожку в midi-файл. Пригодится тем, кто не умеет или не хочет наигрывать что-то самостоятельно, но «снять» ноты нужно. Далее полученный midi вы можете использовать в любом секвенсоре (Fruity Loops, Ableton Live, Reaper) и играться по полной с любыми синтезаторами. Однако ожидать эффекта «Вау!», как и особых хитрых функций, не стоит.
  • STEM MP3 или STEM WAV — разделяет трек и высылает пользователю отдельные дорожки в mp3 или wav.
  • /bp — калькулятор, который рассчитывает, насколько нужно поменять Pitch при изменении BPM, чтобы сохранить тональность трека. Можно просто ввести команду, дорожка для этого не нужна.

Что использовали

Библиотека Spleeter от Deezer

Если вкратце, то я был в восторге от библиотеки. Пробегусь по ключевым преимуществам.

  • Позволяет работать с tensorflow-cpu (работа только на процессоре и памяти). При этом реализация довольно быстрая.
  • Интегрируется в бот «на раз-два» (но есть нюансы, про них позже).
  • Есть пачка предобученных моделей на две, четыре и пять дорожек.
  • Около-продакшн решение: используется в плагинах от iZotope и других.

Почему не demuqs

Библиотека работает, но не подошла мне по нескольким параметрам. Во-первых, она оптимизирована под работу с CUDA-ядрами. Можно использовать опцию работы только на CPU, но это не сильно поможет. Во-вторых — у нее низкая скорость работы: в моем случае на моделях из четырех дорожек demuqs в 10 раз медленнее spleeter. Для бота это критично.

Что еще


  • Aiogram — базовая библиотека для тех, кто работает с синхронными вызовами для ботов. Есть немного токсичное сообщество, которое поможет при необходимости.
  • Librosa — одна из лучших библиотек для работы с музыкальными файлами. Вдобавок использовали форк (микропроект) Tonal_Fragment и sound_to_midi.
  • Ffmpeg — не библиотека, но набор софта и кодеков. Нужен для работы spleeter.
  • Tdlib — библиотека для работы с Telegram Local API. Позволяет увеличить допустимый размер файлов, которые мы отправляем в бота, до 2 ГБ.
  • Aiosqlite. Sqlite — де-факто стандарт для pet-проектов на Python. Ее асинхронная версия чуть больше подходит для ботов. Для production-решений — выбор не самый оптимальный, но мне просто удобнее работать с Aiosqlite.

Сколько нужно ресурсов


Плюс Spleeter в том, что он может обходиться без GPU. Работает при этом довольно шустро, а в умелых руках с tensorflow-cpu — еще быстрее.

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

Конфигурация

  • 6 vCPU,
  • 12 ГБ RAM + 4 ГБ SWAP,
  • сетевой диск на 50 ГБ (чтение — 320, запись — 120 IOPS, 100 МБ/с),
  • CentOS 9 Stream.

Однако можно оптимизировать процессы и доработать код. По моим расчетам это позволит снизить потребление до 4 vCPU и 8 ГБ RAM.

Telegram вместо студии звукозаписи: как я создал бота для мобильных музыкантов (6)

А что по цифрам

Сегодня больше «танцую о литературе», чем пишу непосредственно о звуке. Как показывают тесты, бот разделяет дорожки приемлемо для большинства мобильных музыкантов. При желании библиотеку Spleeter можно протестировать или посмотреть исследования. Немного пороемся в статистике:

Telegram вместо студии звукозаписи: как я создал бота для мобильных музыкантов (7)


Статистика использования бота.

Бот распространяется методом сарафанного радио — один раз поделился им в каналах битмейкеров и DIY-музыкантов. Общая численность каналов — около 8 000 человек (на самом деле, около 10 000, но 20-30% аудитории пересекается и активно сидит то в одном, то в другом канале).

Общая аудитория уникальных пользователей с двух ботов — около 250 человек. В обе версии при этом «ходили» всего 37 человек. Итоговая конверсия бота — 3%.

Изначально было предположение, что бота на две дорожки будут использовать чаще, ведь он удобен для мэшапов и забавных ремиксов для соцсетей. Еще помню, как в конце двухтысячных все искали инструменталы для школ вокала в местных ДК и использовали Adobe Audition с его чудесными плагинами. Но время, видимо, прошло.

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

  1. «Нужно взять кусок мелодического сэмпла и “сотворить магию”»,
  2. «Хочу взять дорожку вокала и сделать ремикс»,
  3. «Пытаюсь понять, как «работают» бас или барабаны в треке»,
  4. «Определить количество реальных слоев (дорожек) в треке»,
  5. «Быстро определяю тональность, BPM и прочее».

То есть аудитория мобильных DIY-музыкантов просто делает музыку и постоянно учится на разных вещах. И, конечно, использует инструменты в некоммерческих целях.

Внимательный читатель спросит, где split_wav, о котором я упомянул ранее, или скорость работы самого «разделителя». Дам короткую затравку: логирование и оптимизация — моя страсть.

Проблемы

В статье я планировал планировал показать, как проект быстро работает даже на моем плохом коде, на минимуме ресурсов. Однако в ходе подготовки выяснилось, что мне не хватает опыта взаимодействия с логами.

start_time = datetime.datetime.now()функцияdownload_time = (datetime.datetime.now()-start_time).total_seconds()

Код выше отрабатывает, но с aiogram и асинхронным кодом, видимо, нужна своя «черная магия».

Telegram вместо студии звукозаписи: как я создал бота для мобильных музыкантов (8)


Провальная попытка сбора статистики по скорости скачивания трека.

Придется поверить: бот одинаково приемлемо работает на разных VPS и не требователен к быстродействию диска. При использовании HDD- или NVMe-дисков ощутимой разницы нет.

Второе, с чем я не смог совладать, — oversell по памяти при запуске Spleeter и его работе. Это известный топик на Reddit: с базовым ограничением на 50% сталкиваются многие. Проблема в том, что при старте и первом запуске Spleeter он забирает чуть более 2 ГБ памяти. Различные методы и советы от коллег не помогли справиться с этим нюансом.

Безошибочное решение — взять больше памяти и добавить swap, что я и сделал. 🙂 Но вы можете поделиться в комментариях советами и возможными решениями — будет интересно почитать! Однако памяти не нужно будет много, если вы потратите время на оптимизацию.

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

if name == 'main': separator = Separator('spleeter:{0}stems'.format(stem_type_default)) executor.start_polling(dp, skip_updates=True)

Если нет, то расскажу вкратце о проблеме. Separator следует запускать в основном блоке программы. Все мои попытки поместить его определение — например, в двух экземплярах — потерпели сокрушительное фиаско. Затем пришло смирение и идея: новые функции можно обкатывать на боте в две дорожки. Какое-никакое A/B-тестирование на реальной аудитории.

А что дальше?


Я не знаю. 🙂 Программирование и музыка — мои хобби, тренировка для мозга и способ духовного обогащения. Были попытки сбора донатов, чтобы подстегнуть собственный интерес. За все время лишь однажды подарили Telegram Premium, но это тоже очень приятно.

Если у вас есть предложения по улучшению Telegram-бота или вы хотите взять мой код и сделать нечто прекрасное (обязательно — без платной подписки), то пишите мне в Telegram — расшарю проект и по возможности добавлю в бота новые функции.

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

Делайте музыку, создавайте полезные проекты и делитесь предложениями по улучшению бота в комментариях! До новых встреч.

Telegram вместо студии звукозаписи: как я создал бота для мобильных музыкантов (2024)
Top Articles
Discover Authentic Haitian Cuisine in Fort Lauderdale!
Top 8 Bbq Wedding Catering in Holland Patent, NY - Zola
W B Crumel Funeral Home Obituaries
Watch After Ever Happy 123Movies
Tripadvisor London Forum
Non-Identity Functions
Harry Potter Magic Awakened best cards tier list – July 2023
Craigslist In Lakeland
Estate Sales Net Grand Rapids
M&T Bank Atm Locations Near Me
Joe Jonas Lpsg
Ucf Off Campus Partners
Target Nytimes
1977 Elo Hit Wsj Crossword
Sand Castle Parents Guide
Craigslist Jobs Glens Falls Ny
M3Gan Showtimes Near Regal City North
Craigslist Jobs Glens Falls Ny
My Eschedule Greatpeople Me
Nissan Rogue Tire Size
Optum Primary Care - Winter Park Aloma
Craigslist Truck
KINOPOLIS Bonn-Bad Godesberg – Mehr Kino geht nicht
2Lookmovie
Garagesalefinder Com
Dimbleby Funeral Home
Tbom Genesis Retail Phone Number
Scrap Metal Prices in Indiana, Pennsylvania Scrap Price Index,United States Scrap Yards
Craigslist Caldwell Id
Conference Usa Message Boards
Clash of Clans: Best Hero Equipment For The Archer Queen, Ranked
New Homes in Waterleigh | Winter Garden, FL | D.R. Horton
2621 Lord Baltimore Drive
02080797947
Who We Are | Kappa Delta Sorority
Ignition Date Format
Surface Area Formulas (video lessons, examples, step-by-step solutions)
Ken Garff Collision St George
Whitfield County Jail Inmates P2C
Watch Shark Tank TV Show - ABC.com
Briggs And Stratton 125Cc Lawn Mower
2015 | Ducati 1299 Panigale S Test
AI Packgod Roast Generator [100% Free, No Login Required]
Carter Williamson Jay Ok
Inside Dave Grohl's past love life and cheating scandals
Is Chanel West Coast Pregnant Due Date
Best Asian Bb Cream For Oily Skin
Can You Change Your Breathing Style In Demonfall
Amazing Lash Bay Colony
Immobiliare di Felice| Appartamento | Appartamento in vendita Porto San
Christian Publishers Outlet Rivergate
Priority Pass: How to Invite as Many Guests as Possible to Airport Lounges?
Latest Posts
Article information

Author: Aracelis Kilback

Last Updated:

Views: 5673

Rating: 4.3 / 5 (64 voted)

Reviews: 95% of readers found this page helpful

Author information

Name: Aracelis Kilback

Birthday: 1994-11-22

Address: Apt. 895 30151 Green Plain, Lake Mariela, RI 98141

Phone: +5992291857476

Job: Legal Officer

Hobby: LARPing, role-playing games, Slacklining, Reading, Inline skating, Brazilian jiu-jitsu, Dance

Introduction: My name is Aracelis Kilback, I am a nice, gentle, agreeable, joyous, attractive, combative, gifted person who loves writing and wants to share my knowledge and understanding with you.