Я попытался сделать веб приложение, которое позволяет написать текст под бит. Механика следующая: загружаешь бит, задаешь характеристики текста - основная тема, настроение, форма рифмы и др - получаешь куплеты и припев, разложенные по тактам этого бита: строка на такт. Первая версия выдавала мягко говоря плохой результат. Ниже расскажу о том, что получилось докрутить, чтобы получить приемлемый результат.
Сначала бит, потом слова
Модель не слышит аудио, и я ей его не отправляю. Отправляю только числа: темп, где стоят такты, какие части у бита и как бьют барабаны в каждой шестнадцатой. Всё это считается на сервере обычной обработкой сигнала, без нейросетей, меньше чем за секунду.
Темп считается так же, как в любом определителе BPM, но с одной поправкой: я сворачиваю его в диапазон 70–140. Хай-хэты восьмыми делают 90 и 180 одинаково периодичными, и по сигналу их не различить. А куплет читают на медленном счёте, поэтому выбирается он. Если два числа расходятся, страница показывает оба.