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

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

(2022年1月30日)PHP8対応,リファラ・チェック改良

目次

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

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

サンプル・プログラム

圧縮ファイルの内容
VoiceTextWeb.phpサンプル・プログラム本体

解説:準備

  42: //Voice Text Web APIキー
  43: //https://cloud.voicetext.jp/webapi/api_keys/new にて登録のこと.
  44: define('API_KEY', '*********************');
  45: 

VoiceText WebAPIを利用するには、APIキーが必要だ。https://cloud.voicetext.jp/webapi/api_keys/new から利用登録(無料)し、APIキーを入手しておこう。

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の呼び出し

 175: /**
 176:  * 「Voice Text Web API」を用いてテキストを音声データに変換
 177:  * @param   string $text テキスト
 178:  * @return  object 音声データ
 179: */
 180: function text2voice($text) {
 181:     $post = array(
 182:         'text' => $text,
 183:         'speaker' => 'takeru',      //話す人
 184:         'emotion' => 'happiness',   //感情
 185:         'emotion_level' => 1,       //感情レベル
 186:         'pitch' => 100,             //声の高低
 187:         'speed' => 100,             //話す速度
 188:         'volume' => 100,            //音量
 189:         'format' => 'wav'           //データ形式
 190:     );
 191: 
 192:     $url = VOICETEXTWEB_URL;
 193:     $ch = curl_init();
 194:     curl_setopt($ch, CURLOPT_URL, VOICETEXTWEB_URL);
 195:     curl_setopt($ch, CURLOPT_USERPWD, API_KEY);
 196:     curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
 197:     curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
 198:     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
 199:     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
 200:     curl_setopt($ch, CURLOPT_HEADER, FALSE);
 201:     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
 202:     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
 203:     curl_setopt($ch, CURLOPT_POST, TRUE);
 204:     curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
 205: 
 206:     $data = curl_exec($ch);
 207:     curl_close($ch);
 208: 
 209:     return $data;
 210: }

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

解説:音声出力

 250:     if ($data !NULL) {
 251:         $res = base64_encode($data);
 252:         $res = "<p><audio autoplay controls src=\"data:audio/wav;base64,{$res}\"></audio></p>";
 253:     }

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

 300: //直接出力
 301: if (($sour !''&& (getParam('mode', FALSE, -1) == 0)) {
 302:     header('Content-type: audio/x-wav');
 303:     print($data);
 304: 
 305: //画面出力
 306: else {
 307:     //表示HTML作成
 308:     $HtmlBody = makeCommonBody($sour, $data, $errmsg, VOICETEXTWEB_URL);
 309:     //表示処理
 310:     echo $HtmlHeader;
 311:     echo $HtmlBody;
 312:     echo $HtmlFooter;
 313: }

そこで、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