Qwen3-TTS на Rust с Candle: кроссплатформенный синтез речи 2026 | AiManual
AiManual Logo Ai / Manual.
30 Янв 2026 Инструмент

Qwen3-TTS на Rust: как собрать и использовать кроссплатформенную библиотеку Candle

Собираем Qwen3-TTS на Rust с фреймворком Candle. Работает на CPU, CUDA и Metal. Полный гайд по установке и использованию на 30.01.2026.

Зачем Rust для TTS? (И почему это не безумие)

Когда все вокруг пишут на Python и ждут по 30 секунд на генерацию одной фразы, Rust выглядит как экзотика. До января 2026 года. Сейчас ситуация изменилась: Qwen3-TTS 1.7B на Rust с фреймворком Candle работает в 2-3 раза быстрее эталонной Python-версии. И да, это на CPU.

💡
Candle — это Rust-фреймворк для машинного обучения от Hugging Face. Поддерживает CUDA, Metal и CPU. Не требует Python, не тянет за собой 5 ГБ зависимостей. Идеально для встраивания в нативные приложения.

Что умеет эта сборка (и чего не умеет)

Реализация от сообщества на GitHub — это порт оригинального Qwen3-TTS. На 30.01.2026 поддерживает:

  • Модель Qwen3-TTS 1.7B (последняя стабильная версия на начало 2026)
  • Клонирование голоса по 3-секундному образцу
  • Экспорт в WAV с настройкой темпа и интонации
  • Автоматическое определение языка текста
  • Поддержка русского, английского, китайского, японского

Не ждите здесь графического интерфейса. Это библиотека для разработчиков. Если нужен готовый софт — смотрите портативную версию для Windows.

Сборка: от установки Rust до первого аудио

1 Ставим Rust и зависимости

Если Rust уже стоит — пропускайте. Если нет, готовьтесь к простой команде:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Перезагружаем терминал. Проверяем:

rustc --version
cargo --version

2 Клонируем и собираем проект

Идем на GitHub, ищем репозиторий "qwen-tts-candle-rust". Клонируем:

git clone https://github.com/[username]/qwen-tts-candle-rust.git
cd qwen-tts-candle-rust

Теперь важный момент: выбор бэкенда. По умолчанию — CPU. Но если у вас NVIDIA GPU:

# Для CUDA (NVIDIA)
export CUDA=1
cargo build --release --features cuda

# Для Metal (Apple Silicon Mac)
export METAL=1
cargo build --release --features metal

# Для CPU (все остальное)
cargo build --release

На Windows с CUDA часто возникают проблемы с путями. Убедитесь, что CUDA Toolkit 12.x установлен и переменная CUDA_PATH прописана. Если не работает — переходите на CPU, он все равно быстрее Python-версии.

3 Качаем веса модели

Библиотека не включает веса. Их нужно скачать отдельно с Hugging Face:

# Создаем папку для моделей
mkdir -p models/qwen-tts-1.7b

# Качаем конфигурацию и веса
# Используем официальную модель от Qwen
wget -P models/qwen-tts-1.7b https://huggingface.co/Qwen/Qwen3-TTS-1.7B/resolve/main/config.json
wget -P models/qwen-tts-1.7b https://huggingface.co/Qwen/Qwen3-TTS-1.7B/resolve/main/model.safetensors

Размер — около 3.5 ГБ. Если нужна легкая версия — есть квантованные веса в сообществе, но они менее стабильны.

Первый запуск: от текста к речи за 5 секунд

Собираем пример из репозитория:

cargo run --release --example tts_basic -- \
  --model-path ./models/qwen-tts-1.7b \
  --text "Привет, это тест синтеза речи на Rust" \
  --output ./output.wav

Первая генерация займет 10-15 секунд (модель загружается в память). Последующие — 2-3 секунды на CPU, меньше секунды на GPU.

💡
Лайфхак: проверяйте качество синтеза через STT (speech-to-text). Запустите полученный WAV через Whisper или другую модель и сравните с оригинальным текстом. Если совпадение меньше 90% — что-то не так с настройками.

Клонирование голоса: ваш голос за 3 секунды

Вот где Rust-версия показывает себя во всей красе. Нужен WAV-файл с образцом голоса (минимум 3 секунды, чистая запись):

cargo run --release --example voice_clone -- \
  --model-path ./models/qwen-tts-1.7b \
  --reference-audio ./my_voice.wav \
  --text "Этот текст будет произнесен моим голосом" \
  --output ./cloned.wav

Качество клонирования в Rust-версии идентично оригиналу. Но есть нюанс: если в Python-версии можно настраивать эмоции через промпты, здесь эта функция пока сыровата.

Сравнение с альтернативами: почему не Python?

Платформа Время генерации (3 сек аудио) Потребление памяти Кроссплатформенность
Qwen3-TTS на Python (оригинал) 8-12 секунд ~6 ГБ RAM Только там, где есть Python
Rust + Candle (эта статья) 2-4 секунды ~4 ГБ RAM Windows, Linux, macOS, iOS*
Pocket TTS 0.5 секунды ~500 МБ RAM Везде, но качество ниже
MLX на iPhone 3-5 секунд ~2 ГБ RAM Только Apple Silicon

*iOS поддержка экспериментальная, требует сборки под aarch64-apple-ios. Но работает. Проверено на iPhone 17 Pro (2025).

Интеграция в ваши проекты: не только консоль

Cargo.toml — добавляем зависимость:

[dependencies]
qwen-tts-candle = { git = "https://github.com/[username]/qwen-tts-candle-rust.git" }
candle-core = "0.4"
candle-nn = "0.4"

Базовый пример использования в коде:

use qwen_tts_candle::{QwenTTS, QwenTTSConfig};
use std::path::Path;

#[tokio::main]
async fn main() -> Result<(), Box> {
    let config = QwenTTSConfig {
        model_path: Path::new("./models/qwen-tts-1.7b"),
        device: candle_core::Device::Cpu, // или Cuda(0), Metal
        ..Default::default()
    };
    
    let tts = QwenTTS::new(config).await?;
    
    // Простой синтез
    let audio = tts.synthesize("Привет, мир!", None).await?;
    audio.save_wav("./hello.wav")?;
    
    // Клонирование голоса
    let reference = std::fs::read("./sample.wav")?;
    let cloned = tts.synthesize_with_voice(
        "Это мой клонированный голос",
        &reference,
        None
    ).await?;
    
    Ok(())
}

Кому подойдет эта сборка? (Честно)

Если вы:

  • Разрабатываете десктопное приложение с TTS и не хотите тащить Python
  • Создаете конвертер аудиокниг и нужна скорость
  • Хотите встроить TTS в игру или интерактивное приложение
  • Экспериментируете с AI-радиостанциями на Rust
  • Ненавидите зависимости и хотите один бинарный файл

Если же вам нужен готовый инструмент с GUI — лучше смотрите в сторону готовых TTS-движков или Docker-решений.

Проблемы и подводные камни (чтобы не было сюрпризов)

1. Первая сборка долгая. Candle компилируется с нуля, ждите 5-10 минут.

2. Нет поддержки квантованных моделей из коробки. Только оригинальные веса.

3. Документация скудная. Придется читать исходники и issues на GitHub.

4. Metal на macOS иногда падает с ошибками аллокации памяти. Решение — уменьшить batch size.

💡
Совет от практика: если собираете под Windows, используйте WSL2. Нативная сборка под Windows часто ломается из-за путей к CUDA. В WSL2 все работает стабильнее.

Что дальше? (Прогноз на 2026)

Сообщество активно развивает Candle. К середине 2026 года ожидаем:

Самый интересный тренд — комбинация TTS с локальными LLM. Представьте: ваш Rust-бот не только генерирует текст через Llama, но и говорит его человеческим голосом. Все на одном языке, без Python, без облаков.

Пока остальные спорят, какой фреймворк лучше, Rust-разработчики уже собирают приложения, которые работают везде. Медленно? На первых порах — да. Зато потом не нужно объяснять пользователям, как установить Python 3.11 со всеми пакетами.

Попробуйте. Первая сборка займет время, но когда вы получите первый WAV-файл, сгенерированный на Rust, станет понятно: будущее локального AI — не за монополией Python.