見出し画像

ミニマルへの道:Windows版 piper-plus(つくよみちゃんモデル) で TTS サーバーを立てる

この記事は「AI の返事を音声に変換する TTS(Text to Speech)」を、Stack-Chan Minimal(ミニマル)の魂(PC ローカル AI サーバー)として導入するお話です。ミニマルに接続して使用する部分以外は、一般知識としても役に立ちますよ!

前回の LM Studio では、Whisper.cpp で文字になった質問に対して、ローカル LLM が返事を考えるところまで進めました。

今回はその次の部分、つまり「AI が考えた返事を、ミニマルがしゃべれる音声に変換する部分」を担当する TTS サーバーを作ります。さらに、作成された音声をミニマルのスピーカーから再生するのがゴールです。

音声合成から実際にしゃべるまで

今回使うもの

この記事では、次の構成を例にします。

  • OS:Windows 11

  • TTS エンジン:piper-plus v1.11.0

  • 音声モデル:つくよみちゃん WavLM 版

  • 作業フォルダ:C:\App\piper-plus-bin

  • TTS サーバーポート:5000

  • PC の IP アドレス例:192.168.11.5

画面やバージョンは今後変わる可能性がありますが、この記事では再現性を優先して、piper-plus 本体と音声モデルの取得先を固定します。

今回の流れをまとめると、次のようになります。

前回まで:
Whisper.cpp を起動
↓
LM Studio を起動
↓
ミニマルから質問し、文字の返事を確認

今回:
piper-plus を導入
↓
つくよみちゃん音声モデルを配置
↓
Windows PC 単体で WAV 生成を確認
↓
Python で TTS サーバーを起動
↓
ミニマルから http://PCのIPアドレス:5000 に接続
↓
ミニマルのスピーカーで音声を再生する

仮対応:--download-model tsukuyomi は使いません

piper-plus には、モデルを自動ダウンロードする便利な機能があります。

.\bin\piper.exe --download-model tsukuyomi --model-dir .\models

ただし、5/26現時点のこの記事ではこの方法を使いません。

理由は、現在このコマンドで取得される tsukuyomi-chan-6lang-fp16.onnx が、Windows 環境で speaker_embedding_mask エラーになる場合があるためです。2026/5/26現時点で検証したところ、次のような状態になりました。

Input Missing Input: speaker_embedding_mask
$LASTEXITCODE = -1073740791
test.wav = 0 byte

これは piper-plus v1.11.0 本体の問題ではなく、現在 --download-model tsukuyomi で取得されるモデルとの組み合わせの問題です。製作者様の修正が反映された場合はページを更新しますが、現時点で動作確認できた WavLM 版のつくよみちゃんモデルを、Hugging Face の過去コミットから明示的にダウンロードし、音声を再生することを優先します。


1. 配置フォルダを作る

他のローカル AI サーバー記事と合わせて、C:\App 配下に以下のフォルダを作成し、C:\App\piper-plus-binに移動します。

C:\App\piper-plus-bin
C:\App\piper-plus-bin\models-tsukuyomi-wavlm
C:\App\piper-plus-bin\output
例:フォルダ構成

・PowerShellから実行する場合

mkdir C:\App\piper-plus-bin
mkdir C:\App\piper-plus-bin\models-tsukuyomi-wavlm
mkdir C:\App\piper-plus-bin\output
cd C:\App\piper-plus-bin

2. piper-plus v1.11.0 をダウンロードする

以下のRelease 1.11.0のページのAssetsにある piper-windows-x64.zip をクリックしてダウンロードします。(Assetsの内容は▼ボタンで開きます)

piper-windows-x64.zipをDLする

・PowerShellから実行する場合
ダウンロードにはWindows標準の curl.exe を使います

curl.exe -L `
  "https://github.com/ayutaz/piper-plus/releases/download/v1.11.0/piper-windows-x64.zip" `
  -o "piper-windows-x64.zip"

3. ZIP を展開する

ダウンロードして来たZipファイルを展開します。

Zipファイルを展開

・PowerShellから実行する場合
まず、一時フォルダ piper-windows-x64 に展開します。
※Expand-Archive は、ZIPファイルを展開するPowerShellのコマンドです

Expand-Archive .\piper-windows-x64.zip -DestinationPath .\piper-windows-x64 -Force


次に、中身の「bin/lib/share」を C:\App\piper-plus-bin 直下へ移動し、一時フォルダを削除します。

bin/lib/shareフォルダを直下に移動する

・PowerShellから実行する場合

Move-Item .\piper-windows-x64\piper\* . -Force
Remove-Item .\piper-windows-x64 -Recurse -Force

4. piper-plus 本体の起動確認

音声モデルを入れる前に、まず piper-plus 本体が起動できるかを確認します。PowerShellから以下のコマンドを実行し、ヘルプが表示されれば、本体の導入は成功です。

.\bin\piper.exe --help
piper-plusのhelp表示

5. つくよみちゃん WavLM 版モデルをダウンロードする

--download-model tsukuyomi は使わず、動作確認できた WavLM 版のモデルを固定 URL で取得します。

config.json と .onnx ファイルの 2 つが必要です。

・PowerShellから実行する

curl.exe -L `
  "https://huggingface.co/ayousanz/piper-plus-tsukuyomi-chan/resolve/778b68b00722cd0239db5d79154dc6dcaa4a9b73/config.json" `
  -o "C:\App\piper-plus-bin\models-tsukuyomi-wavlm\config.json"

curl.exe -L `
  "https://huggingface.co/ayousanz/piper-plus-tsukuyomi-chan/resolve/778b68b00722cd0239db5d79154dc6dcaa4a9b73/tsukuyomi-wavlm-300epoch.onnx" `
  -o "C:\App\piper-plus-bin\models-tsukuyomi-wavlm\tsukuyomi-wavlm-300epoch.onnx"
2つのファイルをダウンロードします

6. Windows PC 単体で音声生成を確認する

TTS サーバーを作る前に、まず Windows PC 単体で WAV ファイルを生成できるか確認します。ここでエラーが出る場合は、サーバーを立てる前にモデルやパスの問題を解決できます。

音声を生成します。
・PowerShellから実行する

.\bin\piper.exe `
  --model C:\App\piper-plus-bin\models-tsukuyomi-wavlm\tsukuyomi-wavlm-300epoch.onnx `
  --config C:\App\piper-plus-bin\models-tsukuyomi-wavlm\config.json `
  --text "こんにちは、今日は良い天気ですね。" `
  --output_file C:\App\piper-plus-bin\output\test_wavlm.wav

終了コードを確認します。

echo $LASTEXITCODE

0 が表示されれば成功です。

出力ファイルも確認します。

dir C:\App\piper-plus-bin\output

test_wavlm.wav が表示され、ファイルサイズが 0 でなければOKです。

コマンド実行結果

音声を再生してみましょう。

C:\App\piper-plus-bin\output\test_wavlm.wav

Windows の音声プレイヤーでつくよみちゃんの声が再生されれば、piper-plus 本体と音声モデルの準備は完了です。

メディアプレイヤーが起動し、音声が再生されます

7. TTS サーバー用の Python 環境を作る

次に、ミニマルからHTTPで呼び出せるように、TTSサーバー用のPython環境を作ります。

ここでは、piper-plus本体、WavLM版モデル、Python仮想環境、tts_server.py を以下のフォルダに全てまとめます。
【完成イメージ】

C:\App\piper-plus-bin
├─ bin
│  └─ piper.exe
├─ models-tsukuyomi-wavlm
│  ├─ config.json
│  └─ tsukuyomi-wavlm-300epoch.onnx
├─ .venv
├─ tts_server.py
├─ cache
└─ output

Python仮想環境を作ります。
・PowerShell で次を実行

cd C:\App\piper-plus-bin

py -m venv .venv
.\.venv\Scripts\python.exe -m pip install --upgrade pip
.\.venv\Scripts\pip.exe install fastapi uvicorn pydantic
.venvフォルダが作成されます


コマンドでインストールできたか確認し、バージョンが表示されればOK。
・PowerShell で次を実行

.\.venv\Scripts\python.exe -m uvicorn --version
バージョン表示

8. GitHub から tts_server.py をダウンロードする

tts_server.py は、ミニマルと piper-plus をつなぐためのPythonファイルです。ミニマルから送られてきた文章を受け取り、piper-plusで音声ファイルに変換して、ミニマルへ返す役割をします。これをダウンロードして「C:\App\piper-plus-bin」に置きます。

手動の場合DLボタンから取得

・PowerShell から実行する場合

cd C:\App\piper-plus-bin

curl.exe -L `
  "https://raw.githubusercontent.com/A-Uta/StackChan_Minimal/main/tools/tts_server.py" `
  -o "C:\App\piper-plus-bin\tts_server.py"
C:\App\piper-plus-binにtts_server.pyを置く

これで、TTS サーバーに必要なファイルが C:\App\piper-plus-bin の中に揃いました。


9. TTS サーバーを起動する

まず、`tts_server.py` が置かれているフォルダに移動します。

cd C:\App\piper-plus-bin

その後、TTSサーバーを起動します。
※Port番号は5000をデフォルトにしていますが、自身の環境に合わせて変更してください

.\.venv\Scripts\python.exe -m uvicorn tts_server:app --host 0.0.0.0 --port 5000

起動すると、PowerShell がサーバー実行中の状態になります。

INFO:     Started server process [11172]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:5000 (Press CTRL+C to quit)

のような表示が出ればOKです。

初回起動時に Windows セキュリティやファイアウォールの確認画面が出た場合は「許可」を押してください。 ここで許可しないと、Windows PC 自身からは動くのに、ミニマルなど別の機器から接続できないことがあります。


10. Windows PC 自身から TTS サーバーを確認する

TTS サーバーを起動した PowerShell はそのままにして、別の PowerShell を開きます。

まず、TTS サーバーが動いているかを確認します。
※Invoke-RestMethod:JSONの確認結果を見やすく表示してくれるコマンド

Invoke-RestMethod -Uri "http://127.0.0.1:5000/health" -Method Get

次のように `status : ok` が表示され、`piper` の中の `executable`、`model`、`config` が `C:\App\piper-plus-bin` 配下を指していればOKです。

status : ok
platform : Windows
piper.executable : C:\App\piper-plus-bin\bin\piper.exe
piper.model      : C:\App\piper-plus-bin\models-tsukuyomi-wavlm\tsukuyomi-wavlm-300epoch.onnx
piper.config     : C:\App\piper-plus-bin\models-tsukuyomi-wavlm\config.json
cache_dir        : C:\App\piper-plus-bin\cache
live_endpoint    : /tts_live.wav

次に、音声ファイルを HTTP 経由で取得します。
※Invoke-WebRequest:取得したWAVをファイルとして保存しやすい

Invoke-WebRequest `
  -Uri "http://127.0.0.1:5000/tts_live.wav?text=こんにちは、ミニマルです。&length_scale=1.0&language=ja&character=ja-01" `
  -OutFile "C:\App\piper-plus-bin\output\server_live_test.wav"

※URL後ろの音声設定オプション補足(ミニマルからはWebメニューで指定)
1. length_scale=1.0:標準の速さ
2. language=ja:日本語
3. character=ja-01:つくよみちゃんの声
ミニマルから使う場合は、これらの設定は Web メニュー側の設定内容に合わせて送られます。

ダウンロードした音声を再生します。

C:\App\piper-plus-bin\output\server_live_test.wav
取得した音声を再生


音声が再生できれば、TTS サーバーとしても動作しています。


11. PC の IP アドレスを確認する

ミニマルから接続する場合、127.0.0.1 ではなく、Windows PC の LAN 側 IP アドレスを使います。

Get-NetIPAddress -AddressFamily IPv4 | Select-Object IPAddress, InterfaceAlias

実行すると、次のように表示されます。

IPAddress       InterfaceAlias
---------       --------------
192.168.11.xxx  Wi-Fi
192.168.11.yyy  イーサネット
127.0.0.1       Loopback Pseudo-Interface 1

この中から、現在インターネットにつながっている接続の行を探します。
無線LANで接続している場合は Wi-Fi、有線LANで接続している場合は イーサネット や Ethernet の行を見ることが多いです。

その行に表示されている 192.168... などから始まるIPアドレスが、ミニマルから接続するときに使う Windows PC の IP アドレスです。127.0.0.1 は Windows PC 自身を指す特別なアドレスなので、ミニマルから接続する用途では使いません。

たとえば Windows PC の IP アドレスが 192.168.11.xxx の場合、TTS サーバーのURLは次の形になります。

http://192.168.11.xxx:5000/tts_live.wav?text=こんにちは&length_scale=1.0&language=ja&character=ja-01

次に、LAN 側 IP 経由で音声ファイルを取得します。

Invoke-WebRequest `
  -Uri "http://192.168.11.xxx:5000/tts_live.wav?text=こんにちは、ネットワーク経由のテストです。&length_scale=1.0&language=ja&character=ja-01" `
  -OutFile "C:\App\piper-plus-bin\output\server_lan_live_test.wav"

C:\App\piper-plus-bin\output\server_lan_live_test.wav

ここで音声が再生できれば、ミニマルから接続する準備が整っています。


12. ミニマル側の TTS 設定

ここまでできたら、ミニマルの Web メニューを開き、TTS サーバーの設定を行います。

WebブラウザにミニマルのIPアドレスを入力すると、設定メニューが開くので「AIモデルの設定」を選択します。
※ミニマルの顔がボタンになっており、3回連続して押すとIPアドレスが表示されます。

AIモデルの設定を選択

メニューを下にスクロールし、音声合成(Piper-plus)サーバ設定に先ほど確認したPCのIP アドレス、およびTTS サーバーとして起動に指定したPort番号を入力して保存します。

これでミニマルからTTSサーバーに接続できるようになりました。


13. ミニマルから会話テストする

TTS サーバーまで用意できたら、ミニマルの会話全体をテストします。
※以下のテストを実行する前に、STT(Whisper.cpp) / LLM(LM Studioとモデル読込み) / TTS(piper-plus) を起動しておいてください。

1. ミニマルの画面ボタンを押して、質問を録音
2. Whisper.cpp で文字起こし
3. LM Studio へ質問を送信
4. LM Studio のローカル LLM が返事を生成
5. piper-plus TTS サーバーへ返事の文章を送信
6. piper-plus が WAV を生成
7. ミニマルが WAV を再生

ここまで動けば、ミニマルは「聞く」「考える」「しゃべる」の流れを、Windows PC 上のローカル AI サーバーだけで実行できるようになります。


うまくいかない場合

test_wavlm.wav が作られない

まず、piper-plus 単体で音声生成できるか確認します。

.\bin\piper.exe `
  --model C:\App\piper-plus-bin\models-tsukuyomi-wavlm\tsukuyomi-wavlm-300epoch.onnx `
  --config C:\App\piper-plus-bin\models-tsukuyomi-wavlm\config.json `
  --text "こんにちは。" `
  --output_file C:\App\piper-plus-bin\output\test_wavlm.wav

echo $LASTEXITCODE

0 以外の場合は、モデルパスや config パスを確認してください。


speaker_embedding_mask エラーが出る

このエラーが出る場合は、tsukuyomi-chan-6lang-fp16.onnx を使っている可能性があります。

この記事では次のモデルを使います。

OK:
C:\App\piper-plus-bin\models-tsukuyomi-wavlm\tsukuyomi-wavlm-300epoch.onnx

NG 例:
tsukuyomi-chan-6lang-fp16.onnx

--download-model tsukuyomi を使うと、この NG 例のモデルを取得してしまう場合があります。この記事の手順では使いません。


Windows PC 自身では動くが、ミニマルから接続できない

次の点を確認してください。

  • TTS サーバーが起動しているか

  • --host 0.0.0.0 で起動しているか

  • ポート番号が 5000 で合っているか

  • Windows セキュリティの確認画面で「許可」を押したか

  • ミニマルと Windows PC が同じ Wi-Fi や同じテザリング内にいるか

  • ミニマル側に 127.0.0.1 を設定していないか

ミニマルから接続する場合は 127.0.0.1 ではなく、Windows PC の IP アドレスを使います。

OK:http://192.168.11.xxx:5000/tts_live.wav
NG:http://127.0.0.1:5000/tts_live.wav

返事が長すぎて遅い

TTS は文章が長いほど生成に時間がかかります。LM Studio 側のシステムプロンプトで返事を短くするのが効果的です。

あなたはスタックチャン ミニマルです。
返事は短く、日本語で、1〜2文で答えてください。

完了条件

次の 3 つを満たせば、piper-plus TTS サーバーの準備は完了です。

1. piper-plus 単体で test_wavlm.wav が作成できる
2. http://127.0.0.1:5000/tts_live.wav?text=こんにちは&length_scale=1.0&language=ja&character=ja-01 で WAV が取得できる
3. ミニマルから Windows PC の IP アドレス:5000 に接続できる

まとめ

今回は、Windows 11 上に piper-plus を導入し、つくよみちゃん音声で TTS サーバーを立てました。

現時点の仮対応として、piper-plus 本体だけでなく、音声モデルの取得方法も固定することで音声が再生できるようになります。この記事では、再現性を優先して次の構成にしました。


  • piper-plus 本体:v1.11.0

  • 音声モデル:tsukuyomi-wavlm-300epoch.onnx

  • 設定ファイル:config.json

  • TTS サーバー:FastAPI + Uvicorn

  • ポート:5000

これで、人がミニマルに質問を話しかけて、ミニマルがその回答をスピーカーから音声で回答する流れが完成しました!

会話の一連のワークフロー

お疲れ様でした、ここからが楽しく遊ぶ部分です!
実際に話しかけた結果を見て、LM Studioの最新モデルに切り換えたり、音声合成をpiper-plusからVOICEVOXに切り換えてみたりして、あなたのミニマルとの会話を楽しんでください。


参考リンク

  • piper-plus GitHub Releases 1.11.0 https://github.com/ayutaz/piper-plus/releases/tag/v1.11.0

  • piper-plus GitHub https://github.com/ayutaz/piper-plus

  • つくよみちゃん WavLM 版モデルが含まれる過去コミット https://huggingface.co/ayousanz/piper-plus-tsukuyomi-chan/commit/778b68b00722cd0239db5d79154dc6dcaa4a9b73

  • --download-model tsukuyomi で取得されるモデルの speaker_embedding_mask 関連 issue https://github.com/ayutaz/piper-plus/issues/385


サムネイル

この記事のサムネイルには、フリー素材キャラクター「つくよみちゃん」(© Rei Yumesaki)を使用しています。

つくよみちゃん公式サイト
■イラスト素材:えみゃコーラ様


いいなと思ったら応援しよう!