Bar

PowerShell からWeb API+音声を操作する~VoiceText Web API

先日地元の知人から教えてもらったHOYAさんの音声合成サービス「VoiceText Web API」をPowerShellから操作してみました。
今回は、PowerShell からVoiceText Web APIを操作し音声出力するサンプルをメモ。

VoiceText Web APIとは

VoiceTextとは音声を合成するWebサービスです。
テキスト(文字)を人に近い自然な音声に変換してくれます。
声は複数人から選べ、感情表現もできるので非常に面白いサービスです、まずはWebサイトを見てください。
http://voicetext.jp/
Web APIはこちら。
https://cloud.voicetext.jp/webapi

VoiceTextを操作するサンプル

#Web API URL
$uri = "https://api.voicetext.jp/v1/tts"

#Output File Name
$outFile = "c:\temp\voicetext.wav"

#Web API key
$api = "<your API Key>"

#Voice Text
$text = "<text>"

#VoiceText Parameter
$speaker = "show", "haruka", "hikari", "takeru", "santa", "bear"
$format = "wav", "ogg", "acc"
$emotion = "happiness", "anger", "sadness"
$emotion_level = 2
$pitch = 100
$volume = 100

#Convert Base64
Function Covert-Base64 {
  param($s)
  return  [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($s))
}

#Invoke Web API
Invoke-RestMethod -Uri $uri `
                  -Method Post `
                  -Headers @{Authorization="Basic "+(Covert-Base64( $api + ":"))} `
                  -Body @{text=$text; speaker=$speaker[2];emotion=$emotion[0];} `
                  -OutFile $outFile `

音声を再生サンプル

#Play Sound File(.wav)
$player = New-Object System.Media.SoundPlayer -ArgumentList $outFile
$player.Play()

解説

PowerShellからWeb APIを叩く場合は、Invoke-RestMethod コマンドレットを使用します。
各種パラメータはVoiceTextのAPI マニュアルを参考にします。
API マニュアル - VoiceText

Web APIを叩くのは初めてなので、調査した時に分かった事をメモします。
  • POSTメソッドを使用
  • ベーシック認証は-Headers パラメータにセット
  • API KeyはBase64でエンコード
  • VoiceTextのパラメータは-Body パラメータにセット
  • -Headersと-Bodyは連想配列(@{})を使用
なお、上記サンプルはVoiceText パラメータの一部を使用しています。
全てのVoiceText パラメータをしたい場合は連想配列に追記してください。

次に、音声ファイル(.wav)を再生する方法です。
音声の再生は.NET FrameworkのSystem.Media.SoundPlayer クラスを使用し、Playメソッドを実行すると音声が出力されます。
Playメソッド以外に
  • PlaySyncメソッド
    読み込みが完了するまでそのスレッドが他のメッセージを処理しない
  • PlayLoopingメソッド
    ループ再生
が指定できます。

AzureなどREST APIを使用するケースが多くなりそうなので、絶対に覚えておきたい内容でした。