go-voicevox

module
v1.11.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 9, 2026 License: MIT

README

✍️ Go VOICEVOX

CI Status Language Go Version GitHub tag (latest by date) Go Reference

🚀 概要 (About) - ScriptLine を受け取り、結合済みの WAV を返す。保存は呼び出し側

Go VOICEVOX は、VOICEVOX エンジンの API を使って構造化スクリプトから音声を生成する Go ライブラリです。

責務は []ScriptLine を受け取り、結合済みの WAV バイト列を返す ことだけです。ファイル書き込みも クラウドストレージへのアップロードも行わず、それらに依存もしません。保存は呼び出し側が決めます。


✨ 提供機能 (Features)

  • 組み立ては1関数voicevox.New(...) が API クライアント・話者データ・読み変換器・内部 engine を まとめて用意します。apiURL が空なら localhost:50021 に落とします。
  • 話者一覧は持ちません — 誰を使うかはアプリケーションの方針なので、保存した /speakers 応答を speaker.NewRegistry(raw) に渡します(nil ならエンジンが提供する話者をすべて受け入れ)。 スタイル ID は常に実物のエンジンから取ります — エンジンのビルドで変わるため、保存した ID を 使うと更新の遅れが「別のキャラの声で喋る」形で出ます。
  • 語彙の公開RegistrySpeakerNames() / StyleNames() / StylesFor(name) / DefaultStyleFor(name)。AI のレスポンススキーマ構築などに使えます。話者ごとに引ける StylesFor を推奨 します。StyleNames() は和集合なので、実在しない組み合わせを AI に選ばせてしまいます (選ばれた分は既定スタイルへ落ち、指示が黙って無視されます)。
  • 読み変換は必須 — VOICEVOX が誤読しやすい漢字を避けるため、合成前に必ずカタカナ読みへ変換します。 呼び出し側で無効化はできません。
  • 数字の読みWithNumberReading() で算用数字を日本語の読みへ変換します。 既定では有効ではありません。 形態素解析器の辞書は算用数字に読みを持たないため、 既定だと "2026年8月" が "2026ネン8ツキ" になり、VOICEVOX が字面どおりに読みます (8日→ハチニチ、1人→イチニン、20歳→ニジュッサイ)。付けると数の読みと助数詞の音の変化 (一回→イッカイ、三本→サンボン)まで当てます。変換結果を見ても数字のままなので、 無効のままだと合成するまで誤読に気づけません。 日付・人数・年齢が出る台本では付けてください。
  • 読みの上書きWithReadingOverrides(map[string]string{"8日": "ヨウカ"}) で、表記ごとの読みを 追加できます。固有名詞と、規則で当たらない読みのためのものです — 数字と助数詞は WithNumberReading が規則で読むので、そちらが先です。 どの語をどう読ませるかはアプリケーションの語彙なので、話者一覧と同じくライブラリは中身を持ちません。
  • 長文は自動で分割 — 1 セグメント 200 文字を上限に強制分割してから合成へ回します。
  • 並列合成の制御 — 同時実行数・レート・セグメント単位のタイムアウトを WithMaxParallelSegments / WithSegmentRateLimit / WithSegmentTimeout で調整できます (既定は 5 並列 / 100ms 間隔 / 180 秒。既定のままでよければ渡さないでください)。 投入間隔はスループットのつまみではなく、起動時の一斉接続をならすためのものです。 出力順は入力順を保ちます
  • エラーは集約 — 最初の失敗で止めず、全セグメントの失敗をまとめて1つのエラーで返します。 1 件でも失敗すれば ErrSynthesisBatch を返し、欠けた音声は返しません。
  • Engine は構築後に不変 — 1つの Engine を複数のゴルーチンから同時に Run できます。

🚦 使い方 (Usage)

engine, err := voicevox.New(ctx, httpClient, apiURL, registry)
wavBytes, err := engine.Run(ctx, []voicevox.ScriptLine{
    {Speaker: "四国めたん", Style: "ノーマル", Text: "こんにちは。"},
})
os.WriteFile("out.wav", wavBytes, 0o644) // 保存は呼び出し側の責務

通常はこの 2 呼び出しだけです。話者一覧の用意 (speaker.NewRegistry) と保存は呼び出し側が持ちます。


📦 パッケージ構成 (Package Structure)

利用時の入口は package voicevox だけです。通常は voicevox.New(...)Engine.Run(ctx, lines) しか使いません。

go-voicevox/
├── cmd/           # デモ/サンプル CLI。ライブラリ本体ではありません
│   └── voicevox-demo/
├── voicevox/      # 公開 API。New が依存を組み立て、Engine を返す
├── speaker/       # /speakers 応答の構造・Registry・スタイルIDの解決 (Registry.LoadStyles)
└── internal/      # 外から使わないもの
    ├── api/       #   VOICEVOX API 通信(/audio_query・/synthesis・/speakers)
    └── engine/    #   セグメント化・読み変換・並列合成・WAV 結合・失敗の集約

📜 ライセンス (License)

  • 使用するキャラクターは呼び出し側が speaker.Registry で決めます。このライブラリ自体は特定の キャラクターを同梱・指定しません。合成した音声を公開する際は、VOICEVOX 本体および各音声ライブラリの 利用規約に従ってください(クレジット表記が必要です)。
  • このプロジェクトは MIT License の下で公開されています。

Directories

Path Synopsis
cmd
voicevox-demo command
Command voicevox-demo は、VOICEVOX エンジンで台本を音声合成するデモ CLI です。
Command voicevox-demo は、VOICEVOX エンジンで台本を音声合成するデモ CLI です。
internal
api
Package api は、VOICEVOX エンジンのHTTP APIクライアントです。
Package api は、VOICEVOX エンジンのHTTP APIクライアントです。
engine
Package engine は、スクリプト行の分割・並列合成・結合を行う中核実装です。
Package engine は、スクリプト行の分割・並列合成・結合を行う中核実装です。
Package speaker は、VOICEVOX の話者・スタイルとツール内タグの対応を扱います。
Package speaker は、VOICEVOX の話者・スタイルとツール内タグの対応を扱います。
Package voicevox は、VOICEVOX エンジンを利用した音声合成の公開APIです。
Package voicevox は、VOICEVOX エンジンを利用した音声合成の公開APIです。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL