ガイド

PHP と WordPress でオフラインのテキスト読み上げ

PHP には音声合成機能がないため、多くのチュートリアルはテキストをクラウドAPIに送り、文字数で支払います。すべての記事に音声版を付けたい、通知を読み上げたい、ショップに音声を入れたいサイトでは、その請求は投稿のたびに増え、すべてのテキストがサーバーの外に出ます。

このガイドでは、無料の SuperClonica エンジンをローカルの HTTP サーバーとして使い、PHP から呼び出す方法を紹介します。自然な声、手元に残る WAV ファイル、リクエストごとの料金なしです。

PHP が話す方法

音声はテキストの版ごとに1回生成してファイルとして配信し、ページ表示のたびに合成しないようにしましょう。

  • クラウドAPI:自然な声だが、アカウント、キー、文字数課金、そしてテキストは相手のサーバーへ。
  • SuperClonica:サイトの隣で動くローカル HTTP サーバー。自然な声、キャラクターの声、独自の声をオフラインで。
  • どちらも PHP が JSON を送り、音声を受け取るだけ。変わるのはアドレスだけです。
  • 31言語を話します。中国語はまだ対応していません。

声を無料で聴く

コードを書く前に、どれかの声のページで30〜100文字のフレーズを入力し、言語を選んで生成ボタンを押しましょう。数秒で、サイトに持たせられる声を聴けます。アカウントは不要です。

音声サーバーを起動

NVIDIA のグラフィックカードがあれば cuda イメージで速くなりますが、ふつうのCPUで十分です。

  • 同じマシンか非公開のマシンでサーバーを起動:docker run -d -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu。
  • 初回起動で Supertonic 3 モデル(約385 MB)をボリュームにダウンロードします。準備ができたかは GET /health でわかります。
  • POST /synthesize は text、voice、lang、seed、normalize を含む JSON を受け取り、16ビットモノラルの WAV を返します。
  • voice は標準名 M1〜M5、F1〜F5、または声のファイルをデコードした中身です。

PHP から呼び出す

標準関数以外の拡張は不要です:$voice = json_decode(file_get_contents('voice.json'), true); $body = json_encode(['text' => 'PHP からこんにちは!', 'voice' => $voice, 'lang' => 'ja', 'seed' => 7]); $wav = file_get_contents('http://localhost:8000/synthesize', false, stream_context_create(['http' => ['method' => 'POST', 'header' => 'Content-Type: application/json', 'content' => $body]])); file_put_contents('hello.wav', $wav); 同じリクエストは cURL 拡張や Guzzle などの HTTP クライアントでも動きます。標準の声なら、デコードしたファイルの代わりに 'voice' => 'F1' を渡します。Web 用に小さなファイルが欲しければ、ffmpeg で WAV を MP3 に変換しましょう。

WordPress と本番運用のコツ

WordPress では、公開フックやバックグラウンドジョブから音声を生成し、uploads フォルダーに保存して投稿に添付します。訪問者は合成を待たずにファイルを読み込めます。ポート 8000 をインターネットに公開しないでください。SUPERCLONICA_API_KEY を設定して Bearer トークンとして送るか、サーバーを localhost に置きます。公開記事には中立的な標準の声を選び、音声が生成されたものであることを伝え、文章の記事も読みやすいまま残しましょう。