今回は、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メソッド以外に
次に、音声ファイル(.wav)を再生する方法です。
音声の再生は.NET FrameworkのSystem.Media.SoundPlayer クラスを使用し、Playメソッドを実行すると音声が出力されます。
Playメソッド以外に
- PlaySyncメソッド
読み込みが完了するまでそのスレッドが他のメッセージを処理しない - PlayLoopingメソッド
ループ再生
が指定できます。
AzureなどREST APIを使用するケースが多くなりそうなので、絶対に覚えておきたい内容でした。
AzureなどREST APIを使用するケースが多くなりそうなので、絶対に覚えておきたい内容でした。