実践ガイド · PIPER TTS

録音から
音声へ。

音声データを準備し、Piperモデルを学習するための基本手順です。Kaggleの制限は変更される場合があります。長時間の学習前に割当を確認してください。

01アーカイブの構成

Piper TTS用LJSpeechデータセットの作成

LJSpeechはPiperが想定する標準形式です。各文が個別のWAVファイルとなり、metadata.csvに転写が対応付けられます。

data.zip
├── metadata.csv   # nom_du_fichier|transcription
└── wavs/
    ├── 000001.wav
    └── ...
  1. 01

    音声ファイルを集める

    処理と再配布が許可された録音を使用してください。ゲームのウィキ、お持ちのメディア、公開データセットなどが入手先となります。

  2. 02

    文単位に分割する

    文ごとにWAVファイルを1件用意します。自動分割やアライメントには以下が使えます。

    • audiosplitter · 自動分割
    • Montreal Forced Aligner (MFA) · 強制アライメント
    • faster-whisper + VAD · 文字起こしとタイムスタンプ
    • Audacity · 少量データ向け手動分割
  3. 03

    metadata.csvを作成する

    ファイルごとに1行です。区切りは縦棒です。ファイル名はwavs/内のファイルと完全一致させてください。

    000001.wav|これは文の例です。
    000002.wav|学習用の別の文です。
  4. 04

    アーカイブを圧縮する

    metadata.csvとwavs/フォルダをアーカイブのルートに配置します。

    zip -r data.zip metadata.csv wavs/
  5. 05

    Hugging Faceにアップロードする

    データセットリポジトリを作成します (例: user/wheatley-english-ljspeech)。data.zipと設定記載のREADME.mdを追加します。

    ---
    configs:
    - config_name: default
      data_files:
      - split: train
        path: data.zip
    ---
  6. 06

    Piperフォーラムに投稿する

    データセットと学習チャンネルにスレッドを作成し、Hugging Faceリンクと適切なタグを添えてください。

    Discordチャンネルを開く ↗
02KAGGLE · GPU

Kaggleで音声を学習する

GPU割当はKaggleがアカウントごとに付与し、利用状況で変動します。長時間のセッション前にカウンターを確認してください。

週次GPU割当30時間 · 場合により増加

Kaggleは週30時間を基準とし、需要とリソースにより増加する場合があります。割当は土曜日00:00 UTCにリセットされます。

セッションの最大時間12時間

Kaggleの資料ではCPUとGPUセッションの連続上限は12時間です。CPUのみのノートブックはGPU割当を消費しませんが、セッション時間の上限は適用されます。

利用可能なアクセラレータT4 x2

Kaggleは2026年9月15日にTesla P100を廃止しました。ノートブックではT4 x2が引き続き利用できます。Piper学習にはT4 x2を選び、古いP100手順に従わないでください。

↻

中断後の再開

学習全体は12時間のセッションを超えることがよくあります。このプロジェクトのPiperノートブックはHugging Faceのチェックポイントから再開します。タイムアウトや割当切れの後は再実行し、最新の保存済みチェックポイントから続けてください。

長時間学習の前に

  • ノートブック設定、プロフィール、アクセラレータ使用量ページで残り割当を確認します。
  • 使用しないGPUセッションは停止します。
  • T4 x2を使用します。P100はKaggleで利用できません。

Kaggleの割当、アクセラレータ、画面は変更される場合があります。学習前には必ずアカウントの表示を確認してください。

03PIPER · LOCAL TTS

Piper音声を使う

Piperをインストールし、音声の2ファイルを取得して、ローカルでWAVを生成します。以下のコマンドはOpen Home Foundation管理版を使用します。

  1. 01

    Piperのインストール

    PiperはPythonパッケージとして配布されています。rhasspy/piperリポジトリやバイナリ版を使う古い手順は旧リリースを指します。

    python -m pip install piper-tts
    python -m piper.download_voices en_US-lessac-medium
  2. 02

    音声のダウンロード

    カタログから音声を選び、ONNXモデルと対応するJSON設定ファイルをダウンロードします。2ファイルは一緒に保管します。JSONのパスはモデルパスに.jsonを付けたものです。

    voice.onnx
    voice.onnx.json
  3. 03

    WAVファイルを生成する

    まずPiperカタログから音声をダウンロードするか、以下を.onnxファイルのパスに置き換えてください。

    python -m piper -m ./voice.onnx -f output.wav -- "Bonjour, ceci est un test."
  4. 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
  5. 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)
  6. 06

    Home Assistantと使う

    Home AssistantはWyoming経由でPiperに接続します。設定 → デバイスとサービスでPiperを追加し、Piper TTSエンティティでtts.speakアクションを使用します。

    Home AssistantでPiperを設定する ↗

    Node-REDと使う

    一部の手順で紹介されるnode-red-contrib-piper-ttsは公開カタログで確認できませんでした。方法の一つは内蔵ExecノードからPiperコマンドを呼ぶことです。パスと権限は環境に合わせてください。

  7. 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."
04NODE.JS · TYPESCRIPT

piperttsでNode.jsプロジェクトにPiperを組み込む

piperttsはPiperをNode.jsで使えるようにします。ファイル出力とメモリ内音声に対応します。推奨はPiperNativeTTSです。プロセス内で完結する100%ネイティブ推論 (ONNX + コンパイル済みespeakブリッジ) で、Python不要、ラッパーの約10倍高速です。音声 (.onnx + .onnx.json) は別ファイルのままです。

  1. 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
  2. 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);
  3. 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 });
  4. 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()で文単位の低水準アクセスができます。

  5. 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");