
Одно неудачное «ля» на репетиции может остановить целый оркестр. Дирижер попросит повторить, а на занятии по специальности эту же ноту разберут на атаку, дыхание, строй, вибрато, пока «ля» наконец не зазвучит как «ля».
Компьютер за одну секунду записи получит 44 100 отсчетов амплитуды — и без единой подсказки, что перед ним нота.
Как из этого массива чисел получить высоту звука, слова, тональность и аккорды? Сначала разберусь, что с сигналом делает математика, а потом проведу два опыта в Bothub. Одну фразу произнесу и пропою для AssemblyAI. Suno дам две версии одной задумки: широкое описание и подробное техническое задание.
Ля, ты — крыса
В скрипичном ключе ля первой октавы записывают между второй и третьей линейками нотного стана. По нотам музыкант сразу понимает хотя бы главное: перед ним именно ля. Там же могут быть указаны длительность, динамика и способ исполнения.
Если я сыграю эту ноту на флейте перед микрофоном, мембрана отреагирует на изменения давления воздуха, устройство преобразует колебания в электрический сигнал, а аналого-цифровой преобразователь измерит его через равные промежутки времени.
При частоте дискретизации 44,1 кГц получается 44 100 отсчетов в секунду. В шестнадцатибитной PCM-записи каждый отсчет одного канала можно представить целым числом от −32 768 до 32 767.
Тут легко спутать две частоты. Ля первой октавы — примерно 440 колебаний в секунду. Частота дискретизации — 44 100 измерений за ту же секунду. На один период ноты приходится около ста чисел. Но ни на одном из них не написано, к какой ноте оно относится.
Синусоиду ровно на 440 Гц флейта не выдает, потому что вместе с основным тоном микрофон записывает обертоны, шум воздушной струи. Разобрать эту смесь помогает преобразование Фурье: оно показывает, насколько сильно в сигнале представлены колебания разных частот.
Упрощенно эту идею можно записать так:
У каждой составляющей своя частота, амплитуда и фаза. В записи ля ожидается заметный подъем около 440 Гц, выше — гармоники примерно на 880, 1320 и 1760 Гц. Их набор и соотношение помогают формировать тембр, например, флейта, скрипка и гудок тепловоза даже на одной высоте все-таки не сольются в унисон.
Но спектр всей записи не показывает, когда появилась та или иная частота. Если я добавлю вибрато — небольшое периодическое колебание высоты звука, — в общем спектре вместо движения вверх и вниз останется расширенная область вокруг основного тона.
Поэтому запись делят на короткие перекрывающиеся отрезки и считают спектр отдельно для каждого. Получается STFT — кратковременное преобразование Фурье.
Длину отрезка выбирают под задачу. При частоте дискретизации 44,1 кГц окно в 2048 отсчетов занимает около 46 миллисекунд. Изменения во времени видны довольно хорошо, зато шаг между частотными ячейками составляет примерно 21,5 Гц: близкие частоты различить труднее.
Увеличим окно до 8192 отсчетов — шаг сократится примерно до 5,4 Гц, но в один расчет попадет уже 186 миллисекунд звука. Для быстрой атаки это много. Атака — первые мгновения ноты, когда звук только возникает и резко меняется. За 186 миллисекунд к начальному всплеску успеет добавиться уже установившееся звучание, и программа объединит их в одном спектре. Частоты она разделит точнее, а вот граница, на которой началась нота, размоется.
Результаты надо сложить в матрицу. По горизонтали идет время, по вертикали — частота, а числа показывают уровень каждой частотной составляющей. Когда этим значениям назначают цвета, получается спектрограмма.

В моей записи основной тон оказался около 445 Гц. Если за эталон взять ля первой октавы частотой 440 Гц, отклонение составит примерно 19,6 цента:
Цент — одна сотая равномерно темперированного полутона. Получается, я завысила ля почти на пятую часть полутона. На занятии цифру, скорее всего, никто бы не называл. Преподаватель сказал бы просто чуть отвернуть флейту от губ, чтобы понизить.
Говорить легко. А если спеть?
Спектрограмма показывает, из каких частот собран звук, но слов на ней все еще нет. Здесь подключается другая задача — распознавание речи.
AssemblyAI — сервис для расшифровки аудио. Ему передают запись, а в ответ получают текст. Официальный API также возвращает время начала и конца слов и оценку уверенности модели.
Высоту голосу задают колебания голосовых связок. Гласные различаются прежде всего по формантам — резонансным областям спектра, положение которых зависит от формы носоглотки. Изменились положение языка и губ — сдвинулись форманты, и вместо «а» получилось «о».
При пении основной тон движется по мелодии, а большая часть длительности слога достается гласной. На согласные обычно остается меньше времени: гласную можно тянуть несколько секунд, с т, к или д этот номер не пройдет. Вибрато, дыхание и непривычные ударения тоже меняют акустическую форму слова, хотя само слово для нас прежнее
Для проверки я взяла фразу:
За домом был пруд, а рядом лежал прут.
Выбрала слова похожие специально. В русском языке конечное д оглушается, поэтому «пруд» и «прут» в конце слова звучат одинаково — примерно как [прут],то есть, написание нейросети надо восстанавливать по смыслу. За домом скорее находится пруд, а рядом лежит прут.
Фразу я записала трижды: сначала произнесла обычным голосом, потом пропела на одной ноте и положила на короткую мелодию. Микрофон и расстояние до него не меняла, каждую запись отправляла отдельно. Смотрела на две вещи: сохранится ли фраза целиком и сможет ли AssemblyAI различить эту пару омофонов.
|
Как звучала фраза |
Что вернула AssemblyAI |
Где модель ошиблась |
|
Обычная речь |
«За домом был пруд, а рядом лежал прут» |
Все нормально |
|
Пение на одной ноте |
«За домом був пруд, а рядом лежав пруд» |
Был → був, лежал → лежав, прут → пруд |
|
Короткая мелодия |
«За домом был пруд, а рядом лежал пруд» |
Прут → пруд |
В двух из трех записей AssemblyAI не развел оба слова правильно. В обычной речи сервис сообразил правильно, а в двух пропетых вариантах запутался в прутах и прудах. На одной ноте вдобавок появились формы був и лежав.
Suno, сыграй ми минор
AssemblyAI получает звук и возвращает слова. Suno — это как ChatGPT, только музыкальный: пишем промт — получаем песню с голосом, инструментами и сведением. Пользователь может задать жанр, настроение и слова, но подробного устройства модели разработчики не публикуют. Мы не знаем, хранит ли она где-нибудь аккорды, отделяет ли мелодию от фактуры и на каком этапе определяет тональный центр.
Зато есть открытые работы, по которым виден один из подходов к генерации музыки. Три минуты стереозвука с частотой дискретизации 44,1 кГц — почти 16 миллионов отсчетов по двум каналам. Для модели, которая предсказывает последовательность шаг за шагом, это непомерная длина: генерация займет много времени, а удержать форму целой песни будет трудно.
В MusicGen звук сначала сжимает нейронный кодек. Он переводит запись в несколько потоков дискретных кодов, а трансформер предсказывает их продолжение с учетом текстового описания или заданной мелодии.
Отдельный код — это не «аккорд ре мажор» или «удар малого барабана». Несколько потоков вместе описывают короткий фрагмент уже смешанного звука, в котором одновременно могут быть голос, инструменты и шумы.
В AudioLM запись раскладывают на два набора кодов. По одному модель следит за общим ходом музыки, по другому восстанавливает тембр и мелкие подробности.
Как устроена Suno, из этих работ не узнать. MusicGen и AudioLM я привожу только как примеры того, как миллионы отсчетов ужимают до вменяемой длины.
Но где во всем этом тональность?
В открытых моделях текст сначала преобразуется в числовое представление запроса, от которого зависит дальнейшая генерация. Во время обучения параметры модели связывают такие представления с соответствующими звуковыми примерами. Но если я напишу в промте тональность ми-минор, модель не поставит везде фа-диез, скорее, это будет условие, которое она постарается учесть. Нейросеть может удержать ми минор, а может дать гармонию другой тональности. Насколько именно так поступает Suno внутри, я не могу изучить; проверить можно только результат.
Чтобы посмотреть, помогает ли подробное музыкальное задание управлять генерацией, я дала Suno два описания рок-песни. Это не чистое сравнение бытового и профессионального языка: второй промт не переводит первый слово в слово, а заменяет часть общих пожеланий тональностью, точным темпом, аккордами, числом тактов и способами звукоизвлечения. Я сравниваю широкий бриф с техническим заданием, так что приписать все различия одним только музыкальным терминам нельзя. Оба трека сгенерировала моделью V4.5-ALL.
Первый запрос — обычными словами:
Быстрая рок-песня с женским вокалом. Куплет звучит напряженно и сдержанно, в припеве гитары раскрываются шире. Ровные ударные, повторяющийся мрачноватый рифф. После второго припева вступает резкая флейта с коротким соло. В конце припев повторяется еще раз, громче и плотнее.
Второй — с точным музыкальным ТЗ:
Рок-песня в ми миноре, размер 4/4, темп 132 удара в минуту. Женский альт. В куплете последовательность Em–C–G–D, восьмые у гитары приглушены ладонью. В припеве — открытые квинтовые аккорды и удвоенный вокал. После второго припева — восьмитактовый проигрыш: флейта играет соло, а в басу все это время тянется или повторяется нота ми. В финале — двойной припев.
|
Что проверяла |
Обычный промт |
Музыкальный промт |
|
Жанр |
Получился обычный гитарный поп-рок |
Жанр считывается уверенно, ближе к прогрессивному року |
|
Темп |
Воспринимается как быстрый; точное значение не задавалось |
Около 129 вместо 132 BPM, близко |
|
Тональность |
Ля минор, хотя конкретная тональность не задавалась |
Ближе к соль минору вместо ми минора |
|
Аккорды |
Последовательность не задавалась |
Из-за другого тонального центра Em–C–G–D буквально не сохранилась |
|
Куплет |
Напряжение передано главным образом через громкость |
Есть приглушенные восьмые у гитары |
|
Припев |
Гитары становятся плотнее, но это обычный рок-припев |
Появляются открытые квинтовые аккорды и удвоенный вокал |
|
Голос |
Сопрано |
Альт |
|
Духовой инструмент |
Соло есть, но по тембру больше похоже на жалейку |
Соло флейты есть в отдельном восьмитактовом проигрыше после второго припева |
|
Финал |
Припев повторился |
Двойной финальный припев есть |
|
Общее впечатление |
Типичная рок-песня без заметного риффа или мелодии. После прослушивания вспомнить особенно нечего |
Почти все музыкальные указания выполнены. Главный промах — другая тональность |
Большую часть общего задания Suno выполнила. Выражения вроде «мрачноватый рифф» и «гитары раскрываются шире» задают впечатление, но ничего не говорят о конкретных нотах, ритме или устройстве партии. Под такое описание подходят сотни рок-песен.
Технический промт дал модели больше ограничений и одновременно гораздо больше информации. Темп оказался близок к заданному, форма, гитарные приемы, удвоение вокала и место флейтового соло совпали с описанием. Промахнулась модель с тональностью: вместо ми минора песня получилась ближе к соль минору.
Из генератора в чарт
По предварительной оценке Яндекс Музыки, в сентябре 2026 года ИИ использовался при создании 4,4% треков в каталоге и примерно 27% новых релизов. Новые песни уже добрались до вершины: в феврале 2026 года трек «Сыпь, гармоника!» проекта СДП, созданный на стихи Есенина с помощью нейросети, занял первое место в чарте Яндекс Музыки.
Теперь сервис требует от правообладателей сообщать, использовался ли ИИ для генерации музыки, вокала или текста. В карточке может появиться пометка о полном, частичном или вероятном использовании ИИ. Для рекомендаций появилась настройка «Меньше ИИ». Пользователи неоднозначно относятся к такой музыке, в том числе и потому, что многие нейропесни звучат так, будто их заказывал один продюсер и не в самый продуктивный день.
В исследовании 200 реальных запросов к Udio жанровые указания лучше всего сохранялись в том, как слушатели описывали получившуюся музыку. Запросы с упором на сюжет, напротив, чаще расходились с восприятием результата.
Жанровое обозначение охватывает целый набор связанных признаков: характерные темпы, тембры, ритмические рисунки, устройство куплета и припева, привычную манеру сведения. Песня легко может считываться как рок, даже если ни одна ее партия не описана точно. В моем первом запросе модель получила направление, но почти не получила ограничений, которые заставили бы ее выйти за пределы самых узнаваемых образцов.
У открытых авторегрессионных моделей вроде MusicGen есть еще одна особенность: каждому следующему звуковому коду модель назначает вероятность, а потом из этого распределения выбирается продолжение. При обучении она учится предсказывать подходящий следующий код; оригинальность — не отдельная цель. Мы не знаем, устроена ли Suno так же, поэтому переносить на нее эту схему напрямую нельзя. Можно сказать лишь, что мой широкий промт не требовал ни редкого гармонического хода, ни необычной формы, и сам по себе их не сочинил.
Когда автор может быстро получить много вариантов, проще так же быстро выпустить первый приемлемый трек. Если тысячи людей используют похожие запросы, то и песни будут на одни и тот же мотив.
Как тогда в итоге слышит нейросеть
У компьютера нет ни ля, ни ми минора — только числа. Преобразование Фурье помогает найти в них частоты, распознаватель речи восстанавливает слова, а генеративная модель связывает текстовые описания со звуком.
В обоих опытах системы справились с общей рамкой и споткнулись на точной координате. AssemblyAI в основном сохранил фразу даже при пении, но не сумел правильно развести омофоны по контексту. Suno собрала нужную форму, темп и фактуру, но выбрала другой минор. И контекст, и точные указания влияют на результат, но модель все равно своенравна.
Если пользователю нужны конкретные аккорды, темп и форма, их лучше утонять в промте и проверять отдельно. Чтобы получить конкретно ту песню, которую задумал человек, пока нужен человек.
ссылка на оригинал статьи https://habr.com/ru/articles/1082846/