HOYAサービス株式会社よりVoiceText Web API (β版)という音声合成APIが公開されました。
cURLでテキストを送るだけで音声ファイルが生成されるという分かりやすい仕様でしたので、ブラウザからテキストを入力して好きな文章を喋らせるというツールを作ってみました。VoiceText Web APIのテストツール的にも使っていただけたらと思います。
PHPからAPIを扱う方法について簡単ですがまとめました。
音声を扱うWebサービスなど面白いと思いますので、参考にしてみてください。
ADs
API利用登録のページより必要事項を入力して送信すると、メールでAPIキーが送られてきます。
たとえば、テキストエリアにテキストを入力し、それを喋らせるスクリプトは以下のようになります。
使うサーバの仕様やPHPのバージョンによってcurl_setoptで指定するオプションが微妙に異なるかもしれませんが、ひとまず私が使っているエックスサーバーでは動作を確認しています。
声や話す速度などのオプション値はAPIマニュアルをご覧ください。
数も多くないですし設定方法も文字や数字を渡すだけなので分かりやすいのではないかと思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
<?php //初期設定 $url = 'https://api.voicetext.jp/v1/tts'; $key = 'メールで貰ったAPIキー'; if($_POST['submit']){ //喋る人や感情などのパラメータを設定 //speakerが「show」の場合、emotionパラメータが効かないので注意 $arr = array( 'text' => htmlspecialchars($_POST['input_text']), //喋らせたいテキスト 'speaker' => 'hikari', //話す人 'emotion' => 'happiness', //感情 'emotion_level' => 1, //感情レベル 'pitch' => 100, //声の高低 'speed' => 100, //話す速度 'valume' => 100 //音量 ); //cURLでパラメータ類を送る $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); //このあたりのオプション類がサーバによって違うかも・・・ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSLVERSION, 3); curl_setopt($ch, CURLOPT_POST, true); //オプションここまで curl_setopt($ch, CURLOPT_USERPWD, $key . ":"); //http_build_queryは不要な場合もあるかも・・・ curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($arr)); //$resultに音声データ(バイナリ)が入ります $result = curl_exec($ch); //デバッグ用 /* //いろいろ情報が取れる $header = curl_getinfo($ch); //cURL実行時のエラーが取れる $error = curl_error($ch); */ curl_close($ch); //$resultをどう扱うかについては目的に応じて。 //たとえばwavファイルをダウンロードさせる場合は以下のようなコードになります //サーバ内に保存するならfile_put_contentsを使ったり、base64_encodeで埋め込んだりするなどいろいろあると思います header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="sound.wav"'); echo $result; } ?> |
HTML側では上記のPHPに喋らせたいテキストをPOSTで送信するだけです。
同一ファイルにしてもPHPとHTMLでファイルを分けてもどちらでもいいでしょう。
1 2 3 4 |
<form action="./" method="post"> <textarea name="input_text"></textarea> <input type="submit" name="submit" value="音声を生成" /> </form> |
話し言葉や方言だと不自然さが目立ってしまいますが、ニュースやスピーチの原稿などはとても自然でびっくりしました。
また、女性キャラの声はなかなかかわいいのでいろいろ使いどころがありそうです(意味深)
APIも難しいものではないですので、いろいろ試してみてください。
ADs