Локальная генерация музыки с помощью ИИ снимает ограничения для творчества. Инструменты вроде ACE-Step 1.5 могут работать полностью на Mac, превращая текстовые промпты в полноценные песни за считанные минуты — без облачных кредитов и очередей на загрузку. Эта свобода порождает новую проблему: объем. Когда генерация становится дешевой и мгновенной, вы перестаете спрашивать себя, можете ли вы создать песню, и начинаете гадать, какая из пятидесяти версий на вашем диске достойна того, чтобы ее сохранить.
Я усвоил это на собственном горьком опыте. В обычный день мне требуется около четырех дублей в ACE-Step 1.5, чтобы найти один удачный. Но средние показатели лгут. В одной из недавних сессий я сгенерировал тридцать два дубля в погоне за одной единственной аранжировкой. Прослушивание тридцати двух двухминутных песен занимает больше часа критического слушания. К седьмому треку мой слух уже прощал размытые гласные. К пятнадцатому я уже кивал в такт мелодии, совершенно не замечая пропущенных слов. Усталость слушателя — это не лень, это реальное снижение точности восприятия. Мне нужен был фильтр, который работал бы до того, как подключатся мои уши.
Поэтому я построил локальный QA-пайплайн на базе mlx-whisper, оптимизированного под Apple Silicon порта модели распознавания речи от OpenAI. Идея была проста: если я смогу автоматически транскрибировать каждый дубль и сравнить его с оригинальным текстом, у меня будет объективный показатель соответствия тексту. Это число позволит сократить тридцать два дубля до вполне управляемого количества.
Как работает пайплайн
Рабочий процесс состоит из четырех этапов, и каждый из них для меня обязателен.
Генерация. Я создаю необработанное аудио с помощью ACE-Step 1.5. На этом этапе я ничего не оцениваю. Цель — объем.
Транскрибация. Каждый WAV-файл поступает в mlx-whisper на моем Mac. Поскольку MLX построен для Apple Metal и нейронного движка (neural engine), всё работает полностью локально. Никаких затрат на API, никакой сетевой задержки и никаких опасений по поводу конфиденциальности при отправке необработанного аудио на удаленный сервер. Пакет из тридцати двух файлов транскрибируется, пока я варю кофе.
Оценка. Я сравниваю транскрипцию Whisper с исходным текстовым промптом. Коэффициент соответствия измеряет точность: попал ли певец в каждое слово, или он пропускал строки, невнятно произносил фразы или галлюцинировал слогами? Я вычисляю процент совпадения. Это не эстетическое суждение, а строгий учет текстовой точности.
Фильтрация. Я сортирую дубли по этому коэффициенту. Верхняя квинтиль становится моим пулом для прослушивания. Все остальное отправляется в отдельную папку. Я пока не удаляю варианты с низким баллом, но не трачу на них драгоценное время для прослушивания.
Держите жюри независимым
Я следую одному жесткому правилу: модель генерации никогда не проверяет свою собственную работу. ACE-Step 1.5 не оценивает результаты ACE-Step 1.5. Я использую совершенно отдельный процесс для транскрибации, потому что модель, которая проверяет сама себя, всегда будет слишком снисходительна. У нее те же слепые зоны. Если генератор склонен пропускать окончания или смягчать твердые согласные, цикл самооценки научится игнорировать те же самые огрехи. У независимой модели распознавания речи нет лояльности к музыке. Она просто сообщает то, что слышит, каким бы суровым ни был этот отчет.
Что показали цифры
В партии из тридцати двух дублей пайплайн сузил круг до восьми кандидатов, заслуживающих серьезного внимания. Эти восемь треков имели средний показатель соответствия тексту 83,9%. После того как я прослушал их должным образом и оценил по собственной шкале качества, их средний балл составил 94,1 из 100. Этот разброс говорит сам за себя. Машинный фильтр отловил очевидные структурные ошибки — пропуски слов, сбои ритма, вокальные артефакты — так что моя человеческая оценка проводилась уже на предварительно очищенном наборе. Автоматизация не заменила мое суждение. Она сберегла его.
Когда машина ошибается
Низкий балл — это не всегда плохая песня. Я заметил это на раннем этапе, когда трек, который мне очень понравился, набрал гораздо меньше проходного балла. Текст представлял собой простое пропевание алфавита: отдельные буквы, исполняемые как изолированные звуки. Whisper обучается на естественных структурах предложений. Если скормить ему «A B C D», он часто галлюцинирует слова, вставляет артикли или превращает буквы в невнятные фонемы. Транскрибация не удалась, но вокальное исполнение на самом деле было четким.
Этот случай научил меня практическому пределу. Коэффициент соответствия — это предварительный фильтр, а не окончательный вердикт. Любой дубль с низким баллом все равно проходит десятисекундную проверку человеком, прежде чем я его удалю. Число указывает на вероятность, а не на уверенность. Если относиться к оценке как к судейскому молотку, а не как к компасу, вы выбросите хорошую музыку.
Техническое препятствие
Если вы запускаете MLX на Apple Silicon, проверьте архитектуру вашего Python перед обработкой больших пакетов данных. Распространенная ошибка при настройке — запуск бинарного файла Python через эмуляцию Rosetta. Скрипт все равно будет выполняться, но вы потеряете аппаратное ускорение, которое делает локальную транскрипцию терпимой.
Выполните это в терминале:
python3 -c "import platform; print(platform.machine())"
Вы должны увидеть arm64. Если выводится x86_64, значит, ваша среда эмулируется. Переключитесь на нативную сборку Python или на нативную среду conda, а затем переустановите mlx-whisper. При обработке длинных пакетов разница между эмулированным и нативным выполнением — это разница между тем, чтобы закончить до обеда или закончить к ужину.
Реальная ценность
Генеративный аудиоконтент вознаграждает настойчивых, но человеческое внимание ограничено. Нет никакого смысла прослушивать тридцать два посредственных дубля только для того, чтобы доказать свою тщательность. Поставив mlx-whisper между генератором и своими ушами, я вернул себе часы сосредоточенного творческого времени. Я по-прежнему решаю, какая песня «выживет», а какая — нет. Машина просто гарантирует, что я применяю свое суждение к лучшим из возможных кандидатов.
Полный разбор этого пайплайна доступен здесь. Если вы создаете подобные локальные инструменты QA, сообщество GyaanSetu — отличное место, чтобы обменяться опытом.
