本文へスキップ
株式会社JQITCorporate
Python音声合成AIAppleSilicon生成AI

パソコンで動く無料の声クローンAI ── Qwen3-TTSの再現度が怖いくらい高い

執筆:株式会社JQIT(技術広報)

Qwen3-TTS を使い、手元の Mac で動く音声合成と声のクローンを試しました。37秒のサンプルからどこまで本人に近い声が作れるのか、導入手順とあわせて検証しています。

前回の記事で、Macに話しかけたらAIが答えてくれる音声チャットを作りました。でも、あの時点ではテキストで返ってくるだけ。最後の「声」の部分が欠けていました。

今回、Qwen3-TTSというツールを導入して、ついにAIが声で応答するようになりました。

しかも、自分の声でクローンして喋らせることもできます。37秒の音声サンプルを渡したら、本人と区別がつかないレベルのクローン音声が生成されて、正直ちょっと鳥肌が立ちました。

この記事では、初めてTTS(音声合成)を触る方にも分かるように、環境構築から実際に動かすところまで丁寧に解説していきます。

今回作るもの

前回の記事では、こんな構成の音声AIを目指していました。

┌─────────────┐     ┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│   マイク     │────▶│  STT        │────▶│  LLM        │────▶│  TTS        │
│   入力      │     │ (Qwen3-ASR) │     │ (Ollama)    │     │ (Qwen3-TTS) │
└─────────────┘     └─────────────┘     └─────────────┘     └─────────────┘
      ①                   ②                   ③                   ④
   声を入力          文字に変換          返答を生成          声で出力

前回までで①②③が完成していて、今回は最後の④ TTS(Text-to-Speech) を追加しました。

これで完全ローカルの音声対話AIが完成です。クラウドを使わず、自分のMacだけで全部動きます。

TTS(Text-to-Speech)って何?

一言で言うと

TTSは「Text-to-Speech」の略で、文字を声に変換する技術です。日本語では「音声合成」とも呼ばれます。

テキスト入力 → TTS → 音声出力
「こんにちは」 →     → 「こんにちは」と聞こえる声

身近な例

実は普段の生活でもたくさん使われています。

  • Siri・アレクサ:質問に答えてくれる声
  • カーナビ:「300m先、右折です」
  • YouTubeの実況動画:ゆっくり音声、ずんだもんなど
  • 駅のアナウンス:電車の案内放送(一部)

これらはすべてTTS技術を使っています。

ローカルTTSのメリット

今回使うQwen3-TTSは、クラウドを使わず自分のPCだけで動く「ローカルTTS」です。

クラウドTTS

ローカルTTS

Google Cloud TTS, AWS Polly

Qwen3-TTS, VOICEVOX

速度

ネット環境に依存

PCスペック依存

プライバシー

音声データがサーバーに送られる

完全にローカルで完結

コスト

従量課金(使った分だけ料金)

無料(電気代のみ)

オフライン

使えない

使える

特に「会話内容を外に出したくない」という場合、ローカルTTSは最適です。

Qwen3-TTSの3つのモード

Qwen3-TTSは、Alibaba(アリババ)のQwenチームが開発した最新のTTSモデルです。

面白いのは3つの使い方ができること。

モード比較表

モード

難易度

できること

CustomVoice

★☆☆ 簡単

あらかじめ用意された9種類の声から選ぶ

VoiceDesign

★★☆ 中級

「優しい声で」など言葉で指定

VoiceClone

★★★ 上級

誰かの声をコピーして使う

それぞれ詳しく見ていきましょう。

1. CustomVoice(プリセット音声)

一番シンプルなモード。9種類の声から選ぶだけで使えます。

利用可能な声:
aiden, dylan, eric, ono_anna, ryan, serena, sohee, uncle_fu, vivian

日本語なら vivianserena がおすすめ。女性の声で自然に聞こえます。

2. VoiceDesign(音声デザイン)

ちょっと変わったモードで、「どんな声か」を言葉で説明すると、それに合った声を生成してくれます。

例えば:

  • 「優しく穏やかな若い女性の声で、ゆっくり丁寧に話す」
  • 「元気いっぱいの少年の声で、ハキハキと話す」
  • 「落ち着いた大人の男性の声で、低めのトーンで話す」

こんな感じで指定できます。プロンプト(指示文)を工夫するのが楽しいモードです。

3. VoiceClone(音声クローン)

これが今回のメイン!誰かの声をサンプルから学習して再現します。

必要なのは:

  • 3秒〜1分程度の音声ファイル(参照音声)
  • その音声の文字起こし(何を話しているか)

これだけで、その人の声でどんな文章でも読み上げられるようになります。

実際に環境構築してみよう

必要なもの

  • Mac(Apple Silicon: M1/M2/M3/M4)
  • Python 3.12
  • 約16GB以上のメモリ(Unified Memory)

Step 1: SoXをインストール

まず、音声処理に必要な「SoX」というツールを入れます。

brew install sox

補足: brew はMacのパッケージ管理ツール「Homebrew」のコマンドです。もし brew: command not found と出たら、Homebrewの公式サイトからインストールしてください。

Step 2: Python環境を作成

TTS用の専用環境を作ります。他のPythonプロジェクトと分けることで、ライブラリの衝突を防げます。

# Python 3.12の仮想環境を作成
python3.12 -m venv .venv-qwen-tts

# 仮想環境を有効化
source .venv-qwen-tts/bin/activate

補足: venv は「仮想環境」を作るPythonの標準機能です。有効化すると、ターミナルの先頭に (.venv-qwen-tts) と表示されるようになります。

Step 3: ライブラリをインストール

pip install qwen-tts soundfile

ライブラリ

役割

qwen-tts

Qwen3-TTSを使うためのメインライブラリ

soundfile

音声ファイルの読み書き

これで準備完了!モデル(約3GB〜6GB)は初回実行時に自動でダウンロードされます。

Mac特有の設定について

Apple Silicon(M1/M2/M3/M4)で動かす場合、コードを書くときにいくつか注意点があります。

import torch

model = Qwen3TTSModel.from_pretrained(
    "Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice",
    device_map="mps",           # ←ここがポイント
    dtype=torch.float32         # ←これも重要
)

設定

意味

device_map="mps"

Apple SiliconのGPU(Metal)を使う設定。NVIDIAなら cuda だが、Macは mps

dtype=torch.float32

計算の精度。Macでは float32 が安定(import torch が必要)

難しく考えなくてOKです。「Macではこう書く」と覚えておけば大丈夫

3つのモードを実際に試してみた

1. CustomVoice(プリセット音声)を試す

まずは一番簡単なモードから。

from qwen_tts import Qwen3TTSModel
import soundfile as sf

# モデルを読み込む(初回は自動ダウンロード)
print("モデルを読み込み中...")
model = Qwen3TTSModel.from_pretrained(
    "Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice",
    device_map="mps"
)
print("読み込み完了!")

# 音声を生成
wavs, sample_rate = model.generate_custom_voice(
    text="こんにちは!今日も良い天気ですね。",
    language="Japanese",
    speaker="vivian"  # 9種類から選択
)

# ファイルに保存
sf.write("output.wav", wavs[0], sample_rate)
print("output.wav に保存しました")

このコードを実行すると、output.wav という音声ファイルができます。再生してみると、流暢な日本語が聞こえるはずです。

使える音声一覧:

名前

特徴(印象)

vivian

落ち着いた女性声。日本語におすすめ

serena

明るめの女性声

ono_anna

日本語ネイティブ風の女性声

aiden

男性声

dylan

若い男性声

eric

落ち着いた男性声

ryan

明るい男性声

sohee

韓国語向け女性声

uncle_fu

中国語向け男性声

2. VoiceDesign(音声デザイン)を試す

次は「言葉で声を指定する」モードです。

from qwen_tts import Qwen3TTSModel
import soundfile as sf

# VoiceDesign用のモデルを読み込む
model = Qwen3TTSModel.from_pretrained(
    "Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign",  # ←モデルが違う
    device_map="mps"
)

# 「どんな声か」を言葉で指定
wavs, sample_rate = model.generate_voice_design(
    text="本日はご来場いただきありがとうございます。",
    language="Japanese",
    instruct="優しく穏やかな若い女性の声で、ゆっくり丁寧に話す"
)

sf.write("voice_design.wav", wavs[0], sample_rate)

instruct の部分を変えると、生成される声が変わります。

指定例:

  • 「元気でハキハキした声」
  • 「少し低めの落ち着いた声」
  • 「アニメのキャラクターみたいな可愛い声」

いろいろ試してみると面白いです。

3. VoiceClone(音声クローン)を試す

ここからが本題!自分の声をクローンしてみます。

準備するもの

  1. 参照音声: 自分が話した音声ファイル(WAV形式、3秒〜1分程度)
  2. 文字起こし: その音声で何を話したかのテキスト

私は37秒の音声ファイル(my_voice.wav)を用意しました。

コード

from qwen_tts import Qwen3TTSModel
import soundfile as sf

# VoiceClone用のモデル(Baseモデル)を読み込む
model = Qwen3TTSModel.from_pretrained(
    "Qwen/Qwen3-TTS-12Hz-1.7B-Base",  # ←クローン用はBaseモデル
    device_map="mps"
)

# 音声クローンを実行
wavs, sample_rate = model.generate_voice_clone(
    text="これはクローンされた音声です。本人の声と区別がつきますか?",
    language="Japanese",
    ref_audio="my_voice.wav",           # 参照音声ファイル
    ref_text="参照音声で話した内容..."   # その文字起こし
)

sf.write("cloned_voice.wav", wavs[0], sample_rate)

実行結果

出てきた音声を聞いた瞬間、鳥肌が立ちました

自分が喋っているようにしか聞こえない

声の高さ、話し方のクセ、微妙な間の取り方まで再現されていて、本人と区別がつかないレベル。37秒のサンプルでここまでできるのか、と正直驚きました。

処理時間

項目

参照音声

37秒

生成テキスト

約50文字

実行時間

約38秒(モデルロード含む)

出力音声

9.19秒

環境

Mac (Apple Silicon)

リアルタイムではないですが、十分実用的な速度です。

プロンプトの再利用でさらに高速化

音声クローンには「プロンプト作成」という前処理があります。これを一度作っておけば、2回目以降の生成が速くなります

# 1. プロンプトを一度だけ作成(約1秒)
voice_prompt = model.create_voice_clone_prompt(
    ref_audio="my_voice.wav",
    ref_text="参照音声のテキスト..."
)

# 2. プロンプトを再利用して何度でも生成
texts = ["おはよう", "お疲れ様", "了解です", "ありがとう"]

for text in texts:
    wavs, sr = model.generate_voice_clone(
        text=text,
        language="Japanese",
        voice_clone_prompt=voice_prompt  # ←使い回す
    )
    sf.write(f"{text}.wav", wavs[0], sr)

処理

時間

プロンプト作成

約1秒(初回のみ

音声生成

5〜15秒(テキスト長による)

この方法なら、複数パターンを効率よく生成できます。

つくよみちゃんの声でも試してみた

自分の声だけだと客観的な評価が難しいので、外部の音声コーパスでも試してみました。

なぜ「つくよみちゃん」なのか

音声クローンを試すには「参照音声」が必要です。でも、他人の声を勝手に使うのはNG。そこで探したのがフリーの音声コーパスです。

いくつか調べた結果、つくよみちゃんコーパスを選びました。

つくよみちゃんとは

つくよみちゃんは、声優・夢前黎さんが声を担当するフリー素材キャラクターです。

  • 見た目: アニメ風の女性キャラクター(黒髪ロング、和風テイスト)
  • : 落ち着いた大人っぽい女性声
  • 用途: 動画のナレーション、ゲーム、音声合成の学習など

選んだ3つの理由

理由

詳細

1. 無料で商用利用OK

学習用途・商用利用ともに無料。クレジット表記のみでOK

2. すぐにダウンロード可能

公式サイトから音声データ(WAV)と文字起こし(テキスト)がセットで入手できる

3. 高品質な録音

プロの声優による収録で、ノイズが少なくクローン学習に最適

特に「音声とテキストがセットで公開されている」のが大きい。音声クローンには文字起こしが必要なので、これが揃っているのは助かります。

つくよみちゃんコーパスの種類

コーパス名

内容

音声数

VOICEACTRESS100

声優統計コーパス(標準的な文章)

100文

ITA Corpus

感情表現を含む多様な文章

424文

RECITATION

朗読音声

複数

今回は VOICEACTRESS100 を使いました。1文あたり数秒〜十数秒の音声が100個入っています。

実際にクローンしてみた

VOICEACTRESS100の1番目の音声を使ってクローンを試しました。

# 参照音声
ref_audio = "つくよみちゃん/VOICEACTRESS100_001.wav"
ref_text = "また、東寺のように、五大明王と呼ばれる、主要な明王の中央に配されることも多い。"

# プロンプト作成
voice_prompt = model.create_voice_clone_prompt(
    ref_audio=ref_audio,
    ref_text=ref_text
)

生成結果

10パターンの文章を生成してみました。

No

内容

生成時間

01

「こんにちは!つくよみちゃんです」(自己紹介)

11.8秒

02

「おはようございます」(挨拶)

8.1秒

03

「お疲れ様でした」(挨拶)

8.0秒

04

「本日のニュースをお伝えします」(ナレーション)

6.7秒

05

「それでは、次のコーナーに…」(ナレーション)

7.5秒

06

「このモデルは、音声クローン技術…」(技術説明)

9.4秒

07

「AIによる音声合成の品質が…」(技術説明)

10.6秒

08

「わあ、すごい!とっても嬉しい!」(感情表現)

4.9秒

09

「えっと、ちょっと緊張しています…」(感情表現)

5.3秒

10

「ありがとうございます」(感謝)

7.7秒

たった1文の参照音声から、10パターンすべてでつくよみちゃんの声が再現されました

ナレーション調の文章は特に自然。感情表現は若干平坦になりますが、それでも十分な品質です。

入手方法

つくよみちゃんコーパスは公式サイトから無料でダウンロードできます。

  1. つくよみちゃんコーパス配布ページ にアクセス
  2. 利用規約を確認(商用利用OK、クレジット表記が必要)
  3. 「VOICEACTRESS100」などをダウンロード
  4. ZIPを解凍すると、WAVファイルとテキストファイルが入っている

音声クローンを試したいけど参照音声がない、という方におすすめです。

ついに音声パイプライン完成!

LLMと連携する

前回作った「音声認識 → LLM」に、今回の「TTS」を追加します。

ユーザーの声 → 音声認識(STT) → テキスト → LLM → 返答テキスト → TTS → AIの声

実際の構成:

ユーザー入力 → Ollama (qwen3:4b) → Qwen3-TTS → 音声再生

4つの声から選べるようにした

使う声を選べるようにしました。

No

タイプ

説明

1

自分の声

クローン

自分の声でAIが答える

2

つくよみちゃん

クローン

フリー音声コーパスからクローン。アニメ風の落ち着いた女性声

3

Vivian

プリセット

落ち着いた女性声

4

Serena

プリセット

明るい女性声

つくよみちゃんは無料で商用利用もOKなので、デモやプロトタイプにも安心して使えます。

「自分の声でAIが答える」 という体験、想像以上に不思議な感覚です。自分と会話しているみたい。

パフォーマンス改善

リアルタイム性を上げるためにいくつか工夫しました。

項目

変更前

変更後

効果

モデルサイズ

1.7B

0.6B

処理が高速に

LLM回答

制限なし

30文字以内

生成時間短縮

音声生成時間

13〜23秒

5〜10秒

待ち時間半減

0.6Bの軽量モデルでも品質は十分。音質にこだわるなら1.7Bですが、会話のテンポを重視するなら軽量版がおすすめです。

使い方

# 仮想環境を有効化
source local_llm_dev/.venv-qwen-tts/bin/activate

# 音声チャットを起動
python local_llm_dev/llm_chat_with_voice.py

これで、自分のMacが自分の声で答えてくれる音声AIの完成です。

音声クローン技術の注意点

この技術は非常に強力ですが、悪用される可能性もあります。

やってはいけないこと

  • 他人の声を無断でクローンする
  • クローン音声で詐欺や偽情報を作る
  • 本人のなりすましに使う

今回の記事で使った音声

  • 自分の声: 当然OK
  • つくよみちゃん: 利用規約で学習利用・商用利用ともにOKと明記されている

つくよみちゃんのように利用規約で許可されているコーパスを使うか、自分の声を使うのが安全です。

他人の声を使う場合は、必ず本人の許可を取ってください。

まとめ

Qwen3-TTSをMac(Apple Silicon)で動かして、完全ローカルの音声対話AIを完成させました。

できたこと

モード

内容

CustomVoice

9種類のプリセット音声で合成

VoiceDesign

「優しく穏やかに」など言葉で指定

VoiceClone

37秒のサンプルで自分の声をクローン

LLM連携

Ollama + TTSで音声対話システム構築

驚いたこと

音声クローンの精度が想像以上でした。37秒のサンプルで、本人と区別がつかないレベル。技術の進歩を実感します。


「自分のPCで、自分の声で、AIが答える」

言葉にするとシンプルですが、実際に動いているのを見ると不思議な感覚があります。

ローカルで完結しているので、プライバシーの心配もなし。会話内容が外部に送られることはありません。興味のある方はぜひ試してみてください。

参考リンク

Qwen3-TTS関連

つくよみちゃん関連


前回の記事: Macで完全ローカル音声チャットAIを作ってみた - Qwen3-ASR + Ollamaでオフライン動作

この記事は Qiita でも公開しています。

生成AIを実務で使える形にするまでを、伴走して支援しています。

生成AIの導入支援・内製化支援について見る

同じような課題をお持ちですか。

現状の整理からご相談いただけます。まずはお気軽にお問い合わせください。