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 を使わずに Powershell でAPIのやりとりするよ。