ガイド

Pythonで音声合成:オフライン・無料・自然な声で

Pythonでテキストを音声に変える方法はいくつかあります。OSのロボットのような声で読むライブラリ、テキストをオンラインサービスに送るライブラリ、そして自分のパソコンでニューラルモデルを動かすライブラリです。最後のタイプは今では人の声に近く、しかもインターネットなしで動きます。

このガイドでは選択肢を比較したうえで、オープンモデルSupertonic 3をベースにしたpipパッケージ、SuperClonicaエンジンの動くコードを紹介します。インストール、最初のスクリプト、カスタム音声、長文、DockerでのローカルHTTP APIまで扱います。エンジンは当社の製品なので、該当する箇所ではそう明記します。

Pythonで音声合成をする方法

ライブラリを選ぶ前に、テキストをパソコンの外に出してよいか、声にどれだけ自然さが必要かの2点を決めておきましょう。

  • pyttsx3はシステム内蔵の音声エンジンを操作します。WindowsではSAPI5、macOSではNSSpeechSynthesizer、LinuxではeSpeakです。オフラインで動き数秒でインストールできますが、声はロボット的で、マシンごとに異なります。
  • gTTSはテキストをGoogle翻訳の音声サービスに送り、MP3を保存します。音はクリアですが、インターネットが必要で、選べるのは声ではなく言語とアクセントだけ。非公式のインターフェースなので動かなくなる可能性もあります。
  • Google、Amazon、Microsoft、ElevenLabsのクラウドAPIは音質が非常に良いものの、アカウントとキーが必要で、文字数に応じた課金があり、すべてのテキストが提供元に送られます。
  • Supertonic 3、Kokoro、Piperなどのローカルニューラルモデルは、自分のCPUやGPUで動きます。モデルを一度ダウンロードすればオフラインで動作し、文字単位の費用はかからず、システム音声よりはるかに自然に聞こえます。詳しくは比較ページで解説しています。

SuperClonicaエンジンのインストール

エンジンは2種類のビルドがある1つのpipパッケージです。Windows、macOS、LinuxのあらゆるCPUでPython 3.10以降なら python -m pip install superclonica-cpu。WindowsまたはLinuxのNVIDIA GPUでPython 3.11以降なら python -m pip install superclonica-gpu-cuda。1つの環境にはどちらか一方だけをインストールしてください。どちらも同じsuperclonicaモジュールを提供します。

GPU版はCUDAとcuDNNをpip経由で導入するため、システム側に必要なのはCUDA 12対応のNVIDIAドライバーだけです。GPUが使えない場合はCPUに切り替わります。初回実行時にSupertonic 3モデル(約385 MB)が一度だけ ~/.cache/supertonic3 にダウンロードされます。別の場所に置くには SUPERTONIC_CACHE_DIR を設定します。

最初のスクリプト

エンジンをインポートし、フレーズを合成して保存します。from superclonica import Superclonica、続いて tts = Superclonica()、audio, sample_rate = tts.synthesize("こんにちは。この声は自分のパソコンで動いています。", voice="F1", lang="ja", seed=7)、そして tts.save("hello.wav", audio)。モデルにはM1〜M5とF1〜F5の10種類の声が付属しており、追加ファイルは不要です。

エンジンは一度作成して使い回しましょう。読み込みには数秒かかりますが、その後のフレーズは1秒未満で済みます。当社の計測では、短いフレーズの中央値はRTX 5070 Tiで0.12秒、4スレッドのRyzen 7 5800Xで0.43秒でした。

カスタム音声を使う

Supertonic 3の音声は約0.3 MBのJSONファイルです。音声サンプル付きの無料音声はGitHubのsuperclonica/supertonic-voicesリポジトリにあり、SuperClonicaのカタログにはゲームキャラクターからナレーターまで170以上の音声があり、どれも無料のオンラインデモ付きです。

プリセット名の代わりにファイルを渡します。tts.synthesize("おはようございます。", voice="ciri.json", lang="ja", seed=7)。コマンドラインでは superclonica --text "おはようございます。" --voice ciri.json --lang ja --output morning.wav。どの音声もモデルの31言語すべてを話せます。langにはテキストの言語(例:en、de、es、ru)を指定してください。中国語には対応していません。

長文、会話、ファイル形式

いくつかのオプションで、実際のプロジェクトの大半をカバーできます。

  • 章のような長文も1回の呼び出しで渡せます。エンジンが最大160文字の自然な区切りに分けるため、単語の繰り返しや欠落を防げます。
  • normalize=True は音量を−18 LUFSにそろえます。多数のファイルをつなげるときに便利です。
  • tts.synthesize_batch() は複数の行をそれぞれ別の声で一度に合成します。会話のセリフなどに使え、結果は入力の順番を保ちます。
  • 同じテキスト、音声、シードからは同じ音声が再び得られるので、1行だけ作り直しても他は変わりません。
  • 数字は単語として読み上げられ、チャットでよく使う略語は展開され、絵文字や未知の記号はエラーにならずに取り除かれます。
  • tts.save() はファイルの拡張子に応じてWAV、FLAC、OGGで書き出します。

ローカルHTTP APIとしての音声合成

音声が必要なプログラムがPythonで書かれていない場合は、エンジンをDockerで動かします。docker run -d -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu、NVIDIA GPUなら --gpus all を付けてcudaタグを使います。モデルは初回起動時にボリュームへダウンロードされます。

テキスト、言語、音声ファイルの中身を含むJSONで POST /synthesize を送ると、WAVが返ってきます。音声は約0.3 MBあるので、リクエストはファイルに組み立て、curl -d @request.json で送信してください。

ライセンスと責任ある利用

Supertonic 3はOpenRAIL-Mで公開されています。これは非商用条項ではなく禁止用途のリストを持つ、ロイヤリティフリーのライセンスです。同意なく他人になりすます、だます、嫌がらせをする目的で音声を使わず、必要な場面では機械生成の音声であることを明示してください。

カタログの一部の音声は著名人から着想を得ています。本人の声ではないので、そうした音声を本人の実際の発言として扱わないでください。