PHPでVoiceText WebAPIを利用してテキストを読み上げる

(1/1)
PHPで VoiceText WebAPIを利用し、与えられた日本語テキストを音声で読み上げるプログラムを作成する。

(2026年1月11日)PHP8.5対応:curl_closeを使わない
(2025年9月19日).pahooEnv導入

目次

サンプル・プログラムの実行例

PHPで VoiceText WebAPIを利用してテキストを読み上げる

サンプル・プログラム

圧縮ファイルの内容
VoiceTextWeb.phpサンプル・プログラム本体
.pahooEnvクラウドサービスを利用するためのアカウント情報などを記入する .env ファイル。
使い方は「各種クラウド連携サービス(WebAPI)の登録方法」を参照。include_path が通ったディレクトリに配置すること。
pahooInputData.phpデータ入力に関わる関数群。
使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。
VoiceTextWeb.php 更新履歴
バージョン 更新日 内容
1.2.0 2026/01/11 PHP8.5対応:curl_closeを使わない
1.1 2022/01/30 PHP8対応,リファラ・チェック改良
1.0 2016/01/29 初版
pahooInputData.php 更新履歴
バージョン 更新日 内容
2.0.1 2025/08/11 getParam() bug-fix
2.0.0 2025/08/11 pahooLoadEnv() 追加
1.9.0 2025/07/26 getParam() 引数に$trim追加
1.8.1 2025/03/15 validRegexPattern() debug
1.8.0 2024/11/12 validRegexPattern() 追加

準備:PHP の https対応

クラウド連携や相手先サイトのデータを読み込むのに https通信を使うため、PHPに OpenSSLモジュールが組み込まれている必要がある。関数  phpinfo  を使って、下図のように表示されればOKだ。
OpenSSL - PHP
そうでない場合は、次の手順に従ってOpenSSLを有効化し、PHPを再起動させる必要がある。

Windowsでは、"php.ini" の下記の行を有効化する。
extension=php_openssl.dll
Linuxでは --with-openssl=/usr オプションを付けて再ビルドする。→OpenSSLインストール手順

これで準備は完了だ。

準備:pahooInputData 関数群

PHPのバージョンや入力データのバリデーションなど、汎用的に使う関数群を収めたファイル "pahooInputData.php" が同梱されているが、include_path が通ったディレクトリに配置してほしい。他のプログラムでも "pahooInputData.php" を利用するが、常に最新のファイルを1つ配置すればよい。

また、各種クラウドサービスに登録したときに取得するアカウント情報、アプリケーションパスワードなどを登録した .pahooEnv ファイルから読み込む関数 pahooLoadEnv を備えている。こちらについては、「各種クラウド連携サービス(WebAPI)の登録方法」をご覧いただきたい。

準備:初期値など

VoiceTextWeb.php

  53: // 初期値(START) =============================================================
  54: 
  55: // 表示幅(ピクセル)
  56: define('WIDTH', 600);
  57: 
  58: // Voice Text Web API
  59: define('VOICETEXTWEB_URL', 'https://api.voicetext.jp/v1/tts');
  60: 
  61: // -- 以下のデータは .env ファイルに記述可能
  62: // Voice Text Web APIキー
  63: // https://cloud.voicetext.jp/webapi/api_keys/new にて登録のこと.
  64: if (isset($_ENV['PAHOO_VOICE_TEXT_APIKEY'])) {
  65:     define('VOICE_TEXT_APIKEY', $_ENV['PAHOO_VOICE_TEXT_APIKEY']);
  66: else {
  67:     define('VOICE_TEXT_APIKEY', '');
  68: }
  69: 
  70: // 入力テキスト(初期値)
  71: define('DEF_SOUR', 'PHPで VoiceText WebAPIを利用し、与えられた日本語テキストを音声で読み上げるプログラムを作成する。');
  72: 
  73: // 初期値(END) ===============================================================

VoiceText WebAPIを利用するには、APIキーが必要だ。https://cloud.voicetext.jp/webapi/api_keys/new から利用登録(無料)し、APIキーを入手しておこう。APIキーは、.pahooEnv ファイルに記入するか、本プログラムの定数 VOICE_TEXT_APIKEY に格納する。

WebAPI:VoiceText WebAPI

VoiceText WebAPI
リクエストURL
https://api.voicetext.jp/v1/tts

入力パラメータ
フィールド名 要否 内  容
text 必須 読み上げるテキスト。Unicodeで200文字以内。
speaker 必須 話者名:日本語:show(男性)
日本語:haruka(女性)
日本語:hikari(女性)
日本語:takeru(男性)
日本語:santa(サンタ)
日本語:bear(凶暴なクマ)
format 任意 音声ファイルフォーマット:wav | ogg | aac
wav(デフォルト)
emotion 任意 感情カテゴリの指定:happiness 喜 | anger 怒 | sadness 悲
話者 haruka、hikari、takeru、santa、bear にのみ使用できる。
emotion_level 任意 感情レベル:1~4
2(デフォルト)>
pitch 任意 音の高低:50~200
100(デフォルト)
pitch 任意 音の高低:50~200
100(デフォルト)
speed 任意 話す速度:50~400
100(デフォルト)
>volume 任意 音量:50~200
100(デフォルト)

解説:VoiceText WebAPIの呼び出し

VoiceTextWeb.php

 159: /**
 160:  * 「Voice Text Web API」を用いてテキストを音声データに変換
 161:  * @param   string $text テキスト
 162:  * @return  object 音声データ
 163: */
 164: function text2voice($text) {
 165:     $post = array(
 166:         'text' => $text,
 167:         'speaker' => 'takeru',      // 話す人
 168:         'emotion' => 'happiness',   // 感情
 169:         'emotion_level' => 1,       // 感情レベル
 170:         'pitch' => 100,             // 声の高低
 171:         'speed' => 100,             // 話す速度
 172:         'volume' => 100,            // 音量
 173:         'format' => 'wav'           // データ形式
 174:     );
 175: 
 176:     $url = VOICETEXTWEB_URL;
 177:     $ch = curl_init();
 178:     curl_setopt($ch, CURLOPT_URL, VOICETEXTWEB_URL);
 179:     curl_setopt($ch, CURLOPT_USERPWD, VOICE_TEXT_APIKEY);
 180:     curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
 181:     curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
 182:     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
 183:     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
 184:     curl_setopt($ch, CURLOPT_HEADER, FALSE);
 185:     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
 186:     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
 187:     curl_setopt($ch, CURLOPT_POST, TRUE);
 188:     curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
 189: 
 190:     $data = curl_exec($ch);
 191:     // PHP8.5:非推奨関数
 192:     if (PHP_VERSION_ID < 80500) {
 193:         curl_close($ch);
 194:     }
 195: 
 196:     return $data;
 197: }

VoiceText WebAPI を呼び出すには cURL 関数群を利用している。

解説:音声出力

VoiceTextWeb.php

 237:     if ($data !NULL) {
 238:         $res = base64_encode($data);
 239:         $res = "<p><audio autoplay controls src=\"data:audio/wav;base64,{$res}\"></audio></p>";
 240:     }

デフォルトでは、画面上に HTML audio control を表示するようにしてある。
ただし、Internet Explorer のみ対応していない。

VoiceTextWeb.php

 287: // 直接出力
 288: if (($sour !''&& (getParam('mode', FALSE, -1) == 0)) {
 289:     header('Content-type: audio/x-wav');
 290:     print($data);
 291: 
 292: // 画面出力
 293: else {
 294:     // 表示HTML作成
 295:     $HtmlBody = makeCommonBody($sour, $data, $errmsg, VOICETEXTWEB_URL);
 296:     // 表示処理
 297:     echo $HtmlHeader;
 298:     echo $HtmlBody;
 299:     echo $HtmlFooter;
 300: }

そこで、URLから直接テキストを "VoiceTextWeb.php?sour=%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%92%E8%AA%AD%E3%81%BF%E4%B8%8A%E3%81%92%E3%82%8B" のように指定すると、HTTPヘッダ "Content-type: audio/x-wav" でデータを出力することができるようにした。

参考サイト

(この項おわり)
header