Qwen3-TTS の Rust 実装(qwen3-tts-rs)

AI/ML

概要

qwen3-tts-rsは、Alibabaが公開したQwen3-TTSテキスト音声合成モデルを純Rustで推論できるようにした実験的リポジトリです。Hugging FaceのRust向け推論フレームワークであるcandleを基盤に採用し、PythonやONNXランタイムを必要としないことを特徴とします。プロジェクトは実験段階であり、コード生成にClaude Codeを利用した旨が明記されています。音声クローンの手法としてx-vectorを用いる経路は動作しますが、ICL(in-context learning)によるボイスクローンは現在不安定で、生成音声が破綻する既知の問題があります。

GitHub

リポジトリの統計情報

  • スター数: 15
  • フォーク数: 0
  • ウォッチャー数: 15
  • コミット数: 30
  • ファイル数: 17
  • メインの言語: Rust

主な特徴

  • 完全にRustで実装されたQwen3-TTSの推論パス(Python不要)
  • candleライブラリ上でのテンソル計算・モデル実行
  • x-vectorベースのボイスクローン機能をサポート(ICLは不安定)
  • 実験的・研究用途向けのサンプル実装とユーティリティ群

技術的なポイント

qwen3-tts-rsの技術的な核は「Rust + candle によるモデル推論の自律運用」にあります。candleはRustで書かれた軽量なテンソル/ランタイムで、GPU/CPU上での推論をサポートするため、PythonのランタイムやONNX依存を排してネイティブなバイナリで動作させられる利点があります。本リポジトリはその上でQwen3-TTSのモデル定義と推論パイプライン(トークナイザー → 音声特徴量生成 → メルスペクトログラム → ボコーダー/波形合成)をRustコードで実装する点に価値があります。

実装上の工夫としては、Rustの所有権・ライフタイムに基づくメモリ管理で大規模テンソルを扱う際の効率改善、モデルファイルのストリーミング読み込みやバッファ管理、クロスプラットフォームなオーディオ出力(WAV書き出し等)のユーティリティが挙げられます。また、音声クローン機能はx-vector(話者埋め込み)経路を用いることで比較的安定に動作するよう設計されています。一方でREADMEにある通り、ICL(in-context learning)を使ったボイスクローン経路は現状で音声が破綻する問題が報告されており、モデルの状態や前処理/後処理の差異に起因する可能性があります。

開発者は「実験的」と明言しており、コードはプロダクション品質を目指したものではありません。CIやプリコミット設定、Docker関連の設定ファイルが含まれているため、開発フローや再現環境の構築は比較的整っています。依存関係管理はCargoで行われ、candleおよび関連のRustクレート群により数百万パラメータ級のモデルでも動かせるように設計されています。最終的には、RustエコシステムでTTS研究を行いたい開発者や、Pythonランタイムを避けたいユースケースにとって興味深いベースになります。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .cargo: dir
  • .dockerignore: file
  • .github: dir
  • .gitignore: file
  • .pre-commit-config.yaml: file
  • Cargo.toml: file
  • README.md: file
  • src: dir
  • examples: dir
  • LICENSE: file

…他 12 ファイル

まとめ

実験的だが、RustでTTS推論を完結させる興味深いベース実装。

リポジトリ情報:

READMEの抜粋:

qwen3-tts

Pure Rust inference for Qwen3-TTS, a text-to-speech model from Alibaba. Built on candle — no Python or ONNX runtime required.

All code in this repo was written with Claude Code. This is an experiment — not a production library.

Known Issues

  • ICL voice cloning produces malformed audio. The x-vector-only cloning path works well. ICL (in-context learning) mode does not…