drill_devのブログ

にんともかんとも

VoiceText Web API on Windows(1)

さて、VoiceText Web APIである。
WindowsPCでやってみる。Windows xp はダメだよ、もう。Windows 7 Home Edition.

> curl "https://api.voicetext.jp/v1/tts" -o "vt00.wav" -u "YOUR_API_KEY:" -d "text=おはようございます" -d "speaker=hikari"

公式ページで利用登録して、APIキーを取得すること。abc がキーとすると、-u "abc:" だ。
curl は適当にバイナリを取得してくること。Chocolatey が楽ちん。

で、上を実行して作成された vt00.wav を再生すると・・・再生出来ない。
実はエラーが発生してて、vt00.wav の中身は json形式のテキストだ。

{"error":{"message":"internal server error"}}

"-v" を追加してもう一度実行してみる。

> curl -v "https://api.voicetext.jp/v1/tts" -o "vt00.wav" -u "YOUR_API_KEY:" -d "text=おはようございます" -d "speaker=hikari"
* About to connect() to api.voicetext.jp port 443 (#0)
*   Trying 106.187.40.121...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* connected
* Connected to api.voicetext.jp (106.187.40.121) port 443 (#0)
 :
 :

サーバからのレスポンスは以下の通り

< HTTP/1.1 500 Internal Server Error
< Content-Type: application/json
< X-Revision: ac54b5cec38bd458aba7c100defc369220dd06a6
< Date: Sun, 13 Jul 2014 13:49:21 GMT
< Content-Length: 45
<
{ [data not shown]
100    83  100    45  100    38     38     32  0:00:01  0:00:01 --:--:--    40
* Connection #0 to host api.voicetext.jp left intact
* Closing connection #0
* SSLv3, TLS alert, Client hello (1):
} [data not shown]

何で InternalErrorかというと文字コードUTF-8 じゃないから。
Linuxとか OSXだとこうはならないのは、ターミナルの文字コードがデフォルトUTF-8だからあいつらエラーにならない。Windows は cmd.exe も powershellシフトJISなんだよね。

という訳でとりあえず、再生優先でアルファベットを渡すことにする。

> curl -v "https://api.voicetext.jp/v1/tts" -o "vt00.wav" -u "YOUR_API_KEY:" -d "text=Good Morning." -d "speaker=hikari"

毎回、メディアプレイヤーで再生するのも面倒なので、コマンドラインから再生させることにする。
Powershell だと .NETが使えるので楽だ。

コマンドラインで .wav ファイルを再生する を参考に関数を書く。.NETのメソッドのパス引数はFullPathでないとエラーになるので、Resolve-Path を使う。

Function msPlayerSync {
  param($wavfile)
  $ms = New-Object Media.SoundPlayer( (Resolve-Path $wavfile) )
  $ms.PlaySync()
}
> msPlayerSync .\vt00.wav

おー、しゃべるしゃべる。
次回は、curl.exe を使わずに PowershellAPIのやりとりするよ。