Kaggleは週30時間を基準とし、需要とリソースにより増加する場合があります。割当は土曜日00:00 UTCにリセットされます。
実践ガイド · PIPER TTS
録音から
音声へ。
音声データを準備し、Piperモデルを学習するための基本手順です。Kaggleの制限は変更される場合があります。長時間の学習前に割当を確認してください。
Piper TTS用LJSpeechデータセットの作成
LJSpeechはPiperが想定する標準形式です。各文が個別のWAVファイルとなり、metadata.csvに転写が対応付けられます。
data.zip
├── metadata.csv # nom_du_fichier|transcription
└── wavs/
├── 000001.wav
└── ...- 01
音声ファイルを集める
処理と再配布が許可された録音を使用してください。ゲームのウィキ、お持ちのメディア、公開データセットなどが入手先となります。
Hugging FaceでLJSpeechデータセットを探す ↗yt-dlpで動画ソースをダウンロード - 02
文単位に分割する
文ごとにWAVファイルを1件用意します。自動分割やアライメントには以下が使えます。
- audiosplitter · 自動分割
- Montreal Forced Aligner (MFA) · 強制アライメント
- faster-whisper + VAD · 文字起こしとタイムスタンプ
- Audacity · 少量データ向け手動分割
- 03
metadata.csvを作成する
ファイルごとに1行です。区切りは縦棒です。ファイル名はwavs/内のファイルと完全一致させてください。
000001.wav|これは文の例です。 000002.wav|学習用の別の文です。 - 04
アーカイブを圧縮する
metadata.csvとwavs/フォルダをアーカイブのルートに配置します。
zip -r data.zip metadata.csv wavs/ - 05
Hugging Faceにアップロードする
データセットリポジトリを作成します (例: user/wheatley-english-ljspeech)。data.zipと設定記載のREADME.mdを追加します。
--- configs: - config_name: default data_files: - split: train path: data.zip --- - 06
Kaggleで音声を学習する
GPU割当はKaggleがアカウントごとに付与し、利用状況で変動します。長時間のセッション前にカウンターを確認してください。
Kaggleの資料ではCPUとGPUセッションの連続上限は12時間です。CPUのみのノートブックはGPU割当を消費しませんが、セッション時間の上限は適用されます。
Kaggleは2026年9月15日にTesla P100を廃止しました。ノートブックではT4 x2が引き続き利用できます。Piper学習にはT4 x2を選び、古いP100手順に従わないでください。
中断後の再開
学習全体は12時間のセッションを超えることがよくあります。このプロジェクトのPiperノートブックはHugging Faceのチェックポイントから再開します。タイムアウトや割当切れの後は再実行し、最新の保存済みチェックポイントから続けてください。
長時間学習の前に
- ノートブック設定、プロフィール、アクセラレータ使用量ページで残り割当を確認します。
- 使用しないGPUセッションは停止します。
- T4 x2を使用します。P100はKaggleで利用できません。
Kaggleの割当、アクセラレータ、画面は変更される場合があります。学習前には必ずアカウントの表示を確認してください。
Piper音声を使う
Piperをインストールし、音声の2ファイルを取得して、ローカルでWAVを生成します。以下のコマンドはOpen Home Foundation管理版を使用します。
- 01
Piperのインストール
PiperはPythonパッケージとして配布されています。rhasspy/piperリポジトリやバイナリ版を使う古い手順は旧リリースを指します。
python -m pip install piper-ttspython -m piper.download_voices en_US-lessac-medium - 02
音声のダウンロード
カタログから音声を選び、ONNXモデルと対応するJSON設定ファイルをダウンロードします。2ファイルは一緒に保管します。JSONのパスはモデルパスに.jsonを付けたものです。
voice.onnx
voice.onnx.json - 03
WAVファイルを生成する
まずPiperカタログから音声をダウンロードするか、以下を.onnxファイルのパスに置き換えてください。
python -m piper -m ./voice.onnx -f output.wav -- "Bonjour, ceci est un test." - 04
ファイルからテキストを読み込む
python -m piper -m ./voice.onnx -f output.wav --input-file mon_texte.txt音声を直接再生する
サンプリング周波数は音声により異なります。voice.onnx.jsonを確認し、必要なら22050を変更してください。
echo "Bonjour." | python -m piper -m ./voice.onnx --output-raw | aplay -r 22050 -f S16_LE -c 1 -t raw - 05
Pythonから使う
import wave from piper import PiperVoice voice = PiperVoice.load("./voice.onnx") with wave.open("output.wav", "wb") as wav_file: voice.synthesize_wav("Bonjour le monde.", wav_file) - 06
Home Assistantと使う
Home AssistantはWyoming経由でPiperに接続します。設定 → デバイスとサービスでPiperを追加し、Piper TTSエンティティでtts.speakアクションを使用します。
Home AssistantでPiperを設定する ↗Node-REDと使う
一部の手順で紹介されるnode-red-contrib-piper-ttsは公開カタログで確認できませんでした。方法の一つは内蔵ExecノードからPiperコマンドを呼ぶことです。パスと権限は環境に合わせてください。
- 07
出力を調整する
品質は学習データと選択音声に左右されます。length-scaleを上げると遅く、下げると速くなります。noise-scaleとnoise-wは生成のばらつきを変えます。
python -m piper -m ./voice.onnx --length-scale 1.5 --noise-scale 0.667 --noise-w 0.8 -f lent.wav -- "Texte lent." python -m piper -m ./voice.onnx --length-scale 0.7 --noise-scale 0.667 --noise-w 0.8 -f rapide.wav -- "Texte rapide."
piperttsでNode.jsプロジェクトにPiperを組み込む
piperttsはPiperをNode.jsで使えるようにします。ファイル出力とメモリ内音声に対応します。推奨はPiperNativeTTSです。プロセス内で完結する100%ネイティブ推論 (ONNX + コンパイル済みespeakブリッジ) で、Python不要、ラッパーの約10倍高速です。音声 (.onnx + .onnx.json) は別ファイルのままです。
- 01
依存関係のインストール
資料ではNode.js 18以上とTypeScript 5以上を指定しています。ネイティブ方式は他に不要で、通常のnpm installで足ります。従来のラッパー方式 (python3 -m piper経由のPiperTTS) はPythonとPiperモジュールが別途必要です。カタログID指定ではモデルと設定をmodels/にダウンロードできます。
npm install pipertts # mode wrapper uniquement : python3 -m pip install piper-tts - 02
カタログ音声での開始
import { PiperNativeTTS, resolveModelPathFromOptions } from "pipertts"; import * as fs from "node:fs"; const modelPath = await resolveModelPathFromOptions({ model: "en_US-lessac-medium", modelsDir: "./models", }); const tts = await PiperNativeTTS.load({ modelPath }); const { audio } = await tts.synthesize("Hello from Piper."); fs.writeFileSync("./hello.wav", audio); - 03
ローカルモデルを使う
手動でダウンロードした音声ではONNXファイルのパスを渡します。対応する.onnx.jsonファイルは同じ場所に置きます。設定の場所が異なる場合はconfigPathを指定します。
import { PiperNativeTTS } from "pipertts"; const tts = await PiperNativeTTS.load({ modelPath: "./models/my-voice.onnx", }); const { audio, sampleRate } = await tts.synthesize("Hello.", { speakerId: 0 }); - 04
APIと出力形式
synthesize()はaudio (Buffer)、sampleRate、textを返します。outputFileはディスクにも書き込みます。選択肢: speakerId (複数音声・複数スタイル)、lengthScale (1超で遅く、1未満で速く)、noiseScale、noiseWScale、sentenceSilence、normalizeAudio、volume、outputFormat (wav、raw、mp3、ogg、opus)。mp3とopusは純JS代替あり。oggはFFmpegが必要。phonemize()とsynthesizeChunks()で文単位の低水準アクセスができます。
- 05
従来のラッパー (PiperTTS)
PiperTTSはpython3 -m piperを起動し、合成ごとに1プロセスを使います。約10倍遅く、ネイティブエンジンが動かない環境向けです。PythonとPiperモジュールが必要です。
import { PiperTTS } from "pipertts"; const tts = await PiperTTS.create({ modelPath: "./models/en_US-lessac-medium.onnx", }); await tts.synthesizeToFile("Hello from the legacy wrapper.", "./hello.wav");
