LoginSignup
6
4

More than 5 years have passed since last update.

音声合成APIをPHPで叩いてみたいでござるよ

Posted at

Requestの中身について

前回の記事「音声合成を使ってみる」で紹介した

AITalk® 声の職人®
http://www.ai-j.jp/cloud/voice/

のリクエストは以下の様になっていた。

callback=callback&speaker_id=1&text=%E4%BB%8A%E6%97%A5%E3%81%AE%E6%99%A9%E5%BE%A1%E9%A3%AF%E3%81%AF%E3%80%8C%E3%82%AB%E3%83%AC%E3%83%BC%E3%83%A9%E3%82%A4%E3%82%B9%E3%80%8D%E3%81%A7%E3%81%99%E3%80%82&ext=ogg&volume=1.0&speed=1&pitch=1&range=1&anger=0&sadness=0&joy=0&_=1498824369076

まとめると

パラメータ 意味
callback コールバック関数指定
speaker_id 使用したいキャラ
text 喋らせたい内容
ext 音声ファイルフォーマット(ogg,mp3,wav)
volume 音量?効かないからなくてもいい
speed 話しのスピード、1でOK
pitch 声の高さ、1でOK
range 強弱、1でOK
anger 怒り?効かないからなくてもいい
sadness 悲しさ?効かないからなくてもいい
joy 嬉しさ?聞かないからなくてもいい

というわけで、効かないパラメータを除くとこんな感じになるかな。(見やすい様に改行しているが、実際は改行しない)

allback=callback&
speaker_id=1&
text=%E4%BB%8A%E6%97%A5%E3%81%AE%E6%99%A9%E5%BE%A1%E9%A3%AF%E3%81%AF%E3%80%8C%E3%82%AB%E3%83%AC%E3%83%BC%E3%83%A9%E3%82%A4%E3%82%B9%E3%80%8D%E3%81%A7%E3%81%99%E3%80%82&
ext=ogg&
speed=1

そそ、念のためパラメータ同士は「&」でくっつけるよってのを伝えておく。

PHPでAPIを呼んでみる

PHPはWEBアプリに特化した言語なので、WEBに関する便利な関数が多いのだ。
今回使う関数は「file_get_contents」と「http_build_query」と「stream_context_create」の3つ。

実際使ってみよ。

sample.php

// 喋らせたい文
$text = "今日の晩御飯はカレーです。";

// API
$api = 'http://cloud.ai-j.jp/demo/aitalk2webapi_nop.php';

// Requestのパラメータ生成
// 連想配列を渡せば、綺麗にパラメータを作ってくれる
// callback=callback&speaker_id=1&text=%E4%BB%8A%E6%97%A5%E3%81%AE%E6%99%A9%E5%BE%A1%E9%A3%AF%E3%81%AF%E3%82%AB%E3%83%AC%E3%83%BC%E3%81%A7%E3%81%99%E3%80%82&ext=ogg&speed=1
$content = http_build_query(array(
    'callback'=>'callback',
    'speaker_id'=>1,
    'text'=>$text,
    'ext'=>'ogg',
    'speed'=>1,
  )
);

// パラメータ等を指定
$option = array(
    'http'=>array(
        'method'=>'post',
        'header'=> "Content-type: application/x-www-form-urlencoded\r\n",
        'content'=> $content
    )
);

// APIの呼び出し
$response = file_get_contents($api,false,stream_context_create($option));


echo $response;
echo PHP_EOL;

実行結果

MacBookPro:Desktop skanehira$ php sample.php
callback({"url":"http:\/\/cloud.ai-j.jp\/demo\/tmp\/1_201707041002172097854661.ogg"})
MacBookPro:Desktop skanehira$

まとめ

こんな感じでやればAPIの呼び出しできるよーっと。
本当は音声ファイルを再生したいけどPHPはそのような関数はないっぽいので諦めた(笑)

jsを使えば出来るみたいだけど、勉強も兼ねてそれはまたいつか違う記事で書くと思う。

次回はcurlを使用してGoogleカレンダーの情報を取得する記事を書くよ予定.
やったことがないので、勉強しながらの記事になると思うのでご容赦をm(_ _)m

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4