Ищите музыку по тексту с CLAP
Для кого: Для тех, кто лучше представляет нужное звучание, чем подходящий референсный трек (seed). Задача: Составлять полезные запросы CLAP и правильно читать шкалу оценки. Тип: Руководство
Состояние интерфейса v7
Описанный ниже сценарий React относится к отложенному интерфейсу. Он ещё не перенесён на API схемы v7, поэтому эти шаги сейчас не проверены и недоступны для v7. Используйте приведённую ниже альтернативу через CLI или API бэкенда.
Текстовый поиск пригодится, когда идея уже звучит в голове, но хорошего референсного трека нет. Запрос вроде «broken drums with metallic synth hits» задаёт приложению направление по слышимым признакам. Фильтры метаданных решают другую задачу.
Результат — ранжированный список для прослушивания. В нём могут появиться треки с неполными жанровыми тегами, но совпадение не доказывает буквальное наличие каждого слова из запроса. Изменяя формулировку, вы задаёте другой вопрос и часто получаете другую полезную часть списка.
Вкладка CLAP вызывает /api/search/text. Текст преобразуется в эмбеддинг и сравнивается с сохранёнными аудиоэмбеддингами CLAP. Перед первым поиском выполните анализ CLAP.
Актуальная альтернатива v7
CLI доступен без вкладки React:
dj-sim text-search "dark hypnotic techno, rolling bass, no vocals" --limit 20 --db .\data\library.sqliteКлиенты API могут вызывать POST /api/search/text; актуальный контракт запроса приведён в справочнике API.
Сценарий отложенного интерфейса
Когда выбрать другой поиск
- MERT подходит, если направление уже хорошо передаёт один трек из коллекции.
- SONARA подходит для явного управления ритмом, тембром, динамикой, гармонией или темпом.
- Фильтры фонотеки подходят для надёжных метаданных, например исполнителя или лейбла.
Что нужно до поиска
В базе должны быть аудиоэмбеддинги CLAP. Кнопка поиска CLAP отключена, если сводка фонотеки показывает ноль таких эмбеддингов.
Пример для CLI:
dj-sim analyze --models clap --db .\data\library.sqliteКак составлять запрос
Пишите запросы на английском и описывайте слышимые свойства, а не метаданные. Полезны слова о ритме, ударных, басе, фактуре, инструментах, пространстве, энергии, наличии вокала и стиле.
Примеры:
dark rolling techno, low rumble, sparse vocal texture, hypnotic percussionbroken electro rhythm, syncopated drums, dry bass, metallic synth hitsКаждая строка в интерфейсе считается отдельным положительным запросом. Перед поиском их текстовые эмбеддинги усредняются.
Отрицательный запрос
Поле Negative — набор жёстких отрицательных классов. Каждая строка описывает одно нежелательное слышимое свойство. Когда переключатель включён, поиск отправляет отрицательные запросы и использует адаптивный контраст.
Текущий интерфейс передаёт:
positive_queriesиз основного текстового поля;negative_queriesиз поля отрицаний, если оно включено;adaptive_contrast: true;- ключ выбранного пресета;
deviceиз настройки устройства анализа.
При отрицательных запросах видимая оценка выражает контраст: соответствие положительному запросу минус часть самого сильного отрицательного совпадения. Это не вероятность.
Шкала оценки
Оценки текстового соответствия CLAP обычно ниже оценок аудиосходства по референсному треку. В зависимости от запроса и коллекции полезные результаты могут находиться примерно в диапазоне 0.35..0.55.
Не сравнивайте оценку текстового поиска CLAP напрямую с:
- сходством поиска MERT по референсному треку;
- оценками SET;
- оценкой сходства аудио в Hybrid;
min_similarityв Audio Dedup.
Это разные шкалы оценок.
Параметры текстового поиска CLI
Доступные параметры:
--limit 1..500;--min-similarity;--device auto|cpu|cuda;--use-ann-indexдля постоянного вспомогательного индекса CLAP;--index-dirдля пользовательского каталога индекса.
Если указан --use-ann-index, но вспомогательный индекс отсутствует или устарел, команда выводит предупреждение и возвращается к точному поиску.