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で公開されています。これは非商用条項ではなく禁止用途のリストを持つ、ロイヤリティフリーのライセンスです。同意なく他人になりすます、だます、嫌がらせをする目的で音声を使わず、必要な場面では機械生成の音声であることを明示してください。
カタログの一部の音声は著名人から着想を得ています。本人の声ではないので、そうした音声を本人の実際の発言として扱わないでください。