Привет, Хабр!
Несколько дней назад Alibaba выпустила в открытый доступ линейку своих моделей для генерации аудио. На рынке не так часто случаются такие выпуски, поэтому я решил проверить ее возможности и написать свой отзыв
В релиз вошло пять моделей классов 0.6B и 1.8B:
|
Модель |
Характеристики |
Языковая Поддержка |
Потоковое вещание |
Управление инструкциями |
|
Qwen3-TTS-12Hz-1.7B-VoiceDesign |
Performs voice design based on user-provided descriptions. |
Chinese, English, Japanese, Korean, German, French, Russian, Portuguese, Spanish, Italian |
✅ |
✅ |
|
Qwen3-TTS-12Hz-1.7B-CustomVoice |
Provides style control over target timbres via user instructions; supports 9 premium timbres covering various combinations of gender, age, language, and dialect. |
Chinese, English, Japanese, Korean, German, French, Russian, Portuguese, Spanish, Italian |
✅ |
✅ |
|
Qwen3-TTS-12Hz-1.7B-Base |
Base model capable of 3-second rapid voice clone from user audio input; can be used for fine-tuning (FT) other models. |
Chinese, English, Japanese, Korean, German, French, Russian, Portuguese, Spanish, Italian |
✅ | |
|
Qwen3-TTS-12Hz-0.6B-CustomVoice |
Supports 9 premium timbres covering various combinations of gender, age, language, and dialect. |
Chinese, English, Japanese, Korean, German, French, Russian, Portuguese, Spanish, Italian |
✅ | |
|
Qwen3-TTS-12Hz-0.6B-Base |
Base model capable of 3-second rapid voice clone from user audio input; can be used for fine-tuning (FT) other models. |
Chinese, English, Japanese, Korean, German, French, Russian, Portuguese, Spanish, Italian |
✅ |
Особенности:
Новый токенизатор 12Hz достигается эффективное акустическое сжатие и многомерное семантическое моделирование речевых сигналов
Поддержка 11 языков
Потоковая генерация с минимальной задержкой
Тонкая настройка
Начнем с того, что нам необходимо установить файл: https://sourceforge.net/projects/sox/ и указать расположение до .exe в Path
Затем необходимо установить:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 - для работы с видеокартой NVIDIA
pip install huggingface_hub[hf_xet]
Для Qwen3-TTS доступно 9 голосов. Для лучшего качества рекомендуется использовать их родной язык. Таблица с голосами:
|
Динамик |
Описание голоса |
Родной язык |
|---|---|---|
|
Vivian |
Яркий, слегка резковатый молодой женский голос. |
Китайский |
|
Serena |
Тёплый, нежный голос молодой женщины. |
Китайский |
|
Uncle_Fu |
Опытный мужской голос с низким, мягким тембром. |
Китайский |
|
Dylan |
Молодой пекинский мужской голос с чистым, естественным тембром. |
Китайский (пекинский диалект) |
|
Eric |
Живой мужской голос из Чэнду с лёгкой хрипотцой. |
Китайский (сычуаньский диалект) |
|
Ryan |
Динамичный мужской голос с сильным ритмическим напором. |
Английский |
|
Aiden |
Солнечный американский мужской голос с чистым средним регистром. |
Английский |
|
Ono_Anna |
Игривый японский женский голос с лёгким, подвижным тембром. |
Японский |
|
Sohee |
Тёплый корейский женский голос, наполненный эмоциями. |
Корейский |
Для использования стандартных голосов существует метод generate_custom_voice, в который необходимо передать:
строку или список строк, которые необходимо озвучить
язык (список языков)
имена спикеров
необязательный параметр - instruct (тонкая настройка голоса)
Дополнительные аргументы, такие как temperature, top_k, top_p и другие, но они нам пока не понадобятся. По умолчанию значения:
top_k: int = 50, top_p: float = 1.0, temperature: float = 0.9, subtalker_dosample: bool = True, subtalker_top_k: int = 50, subtalker_top_p: float = 1.0, subtalker_temperature: float = 0.9, eos_token_id: Optional[int] = None, repetition_penalty: float = 1.05,
Инициализация модели:
import torch import soundfile as sf from qwen_tts import Qwen3TTSModel model = Qwen3TTSModel.from_pretrained( "Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice", device_map="cuda:0", dtype=torch.bfloat16, attn_implementation="sdpa", )
Давайте попробуем озвучить несколько текстов разными голосами и инструкциями. Озвучиваемые тексты:
По данным синоптиков, предстоящая неделя принесёт долгожданное потепление. В центральных регионах температура поднимется до двадцати градусов, а дожди наконец-то сменятся ясной и солнечной погодой.
Здравствуйте! Вы позвонили в службу поддержки "Техно-Старт". Мы ценим ваше время. Если вы хотите узнать статус заказа, нажмите один. Если у вас возник вопрос по работе оборудования, нажмите два
first_text = '''....''' second_text = '''...''' wavs, sr = model.generate_custom_voice( text=[first_text, second_text], language=["Russian","Russian"], speaker=["Vivian","Vivian"] ) sf.write("output_base_voice_first_text_raw.wav", wavs[0], sr) sf.write("output_base_voice_second_text_raw.wav", wavs[1], sr)
Давайте попробуем добавить инструкции, чтобы немного изменить голос:
Инструкции:
Используй мягкий, обволакивающий тон. Говори с заботой, нежностью и спокойной теплотой
Говор медленно, с длительными паузами между предложениями
wavs, sr = model.generate_custom_voice( text=[first_text, second_text], language=["Russian", "Russian"], speaker=["Vivian", "Vivian"], instruct=["Используй мягкий, обволакивающий тон. Говори с заботой, нежностью и спокойной теплотой", "Говор медленно, с длительными паузами между предложениями"] ) sf.write("output_base_voice_first_text_instruct.wav", wavs[0], sr) sf.write("output_base_voice_second_text_instruct.wav", wavs[1], sr)
Если вы не хотите использовать существующих спикеров, то можете использовать метод generate_voice_design с инструкцией:
wavs, sr = model.generate_voice_design( text=first_text, language="Russian", instruct="Используй мягкий, обволакивающий тон. Говори с заботой, нежностью и спокойной теплотой", ) sf.write("output_voice_design.wav", wavs[0], sr)
У меня получилась довольно интересная и немного забавная озвучка этих текстов, так как у всех голосов есть азиатский акцент) Конечно, это относительно большой недостаток, так как голоса слабо адаптируются под новый язык, НО меня приятно удивила интонация и обработка цифр именно у базовых голосов.
Кстати, демо версия доступна здесь: https://huggingface.co/spaces/Qwen/Qwen3-TTS-Demo
Наверное, самая интересная часть (по крайней мере для меня). Мне было очень интересно посмотреть, как модель сохраняет интонацию и паузы. Для проверки я взял, наверное, один из самых сложных голосов - монолог Джокера. Я не буду вставлять его здесь, так как он может быть слегка жестким)
Для этого нам нужно указать путь до .wav или .mp3 файла и его расшифровку:
wavs, sr = model.generate_voice_clone( text=''' Знаешь, в чем проблема этого мира? Все так отчаянно пытаются строить планы. Расписывают свою жизнь по минутам, копят на пенсию, выбирают цвет занавесок... Смешно! Они думают, что если будут следовать правилам, то правила их защитят. Но правила — это просто карточный домик. Стоит подуть легкому ветерку хаоса.... и пуф! Всё рушится.... Я не монстр, нет-нет.... Я просто тот самый ветерок.... Я показываю людям, как мало нужно, чтобы цивилизованный человек превратился в зверя. Всего лишь один плохой день... Один маленький толчок.... И знаешь, что самое смешное? В глубине души... им это нравится. Им нравится, когда клетки открываются. Потому что безумие — это как гравитация.... Нужно только подтолкнуть. А ты...? Ты тоже думаешь, что контролируешь ситуацию?''', language="Russian", ref_audio=ref_audio, #оригинал аудио ref_text=ref_text, #транскрибация оригинала ) sf.write("output_voice_clone.wav", wavs[0], sr)
На мое удивление, я получил в целом похожий голос, но с заметными ошибками:
Во-первых, даты и числа. Почему то их генерация у клонированных находится на уровне автоматов пятерочки. Возможно, если передать исходник, который содержит озвученные цифры, то результат будет лучше
Во-вторых, слова, которые содержат Йотированные буквы, но это особенности нашего алфавита.
В третьих, паузы. В монологе джокера много длительных пауз после каждого предложения, которые создают особую атмосферу. Модель пытается их повторить И даже иногда это удается, но, конечно, до оригинала еще далеко. Я пробовал добавлять '...' в конце предложений, но не заметил изменений.
Примеры получившихся аудио будут в моем Telegram канале. Также там я рассказываю про мир AI и автоматизации
Другие возможности
Вы можете создать свой кастомный голос с помощью instruct, а затем клонировать его и озвучивать другие тексты
Вы можете по отдельности использовать кодировщик и декодировщик
Вы можете использовать API, если не хотите пользоваться моделью локально:
|
Описание API |
Документация API |
|---|---|
|
API в реальном времени для Qwen3-TTS с пользовательской голосовой моделью. |
https://www.alibabacloud.com/help/en/model-studio/qwen-tts-realtime |
|
API в реальном времени для Qwen3-TTS — модели голосового клонирования. |
https://www.alibabacloud.com/help/en/model-studio/qwen-tts-voice-cloning |
|
API в реальном времени для Qwen3-TTS — модели голосового дизайна. |
https://www.alibabacloud.com/help/en/model-studio/qwen-tts-voice-design |
Думаю, в скором времени модель будет доступна на OpenRouter
Меня не может не радовать появление открытых моделей для синтеза и транскрибации речи, так как эта область, как и VLM, всегда была менее доступной, чем LLM. Конечно, это не уровень моделей от OpenAi или Google, но для свободных моделей это вполне неплохо. Не забывайте, чем у них всего 1.8B параметров.
Возможно, в 26 году мы увидим еще несколько релизов более крупных моделей, которые будут обращать больше внимания на знаки препинания и которые будут больше адаптированы под русский язык. Для меня, как разработчика AI агентов это откроет новые возможности) Добавьте к этому модель транскрибации от Microsoft VibeVoice-ASR и, возможно, мы полностью перейдем на голосовой интерфейс
Источник


