「「VoiceText Web API」(β版) の提供を開始」にあるように、2014年7月9日から音声合成ソフトウェア「VoiceText」のWeb APIが公開されました。
・VoiceText Web API (β版)
https://cloud.voicetext.jp/webapi
VoiceTextと言えばモヤさまこと、モヤモヤさまぁ~ず2のショウ君で有名なあのソフトです。
これはもう使ってみるしかない!
VBAから!!
・・・というわけで早速使ってみました。
■ APIキーの取得
まずはAPIの利用に必要なキーの取得です。
利用登録ページで必要な情報を入力して登録申請すると、
すぐに登録したEメールアドレス宛にキーが届きます。
■ APIの使い方
APIの使い方は「API マニュアル」に記載されています。
APIキーをユーザー名、パスワードを空としてBasic認証を行い、https://api.voicetext.jp/v1/ttsにパラメーターを付けてリクエストを送るだけです。
問題なくリクエストが通ると、wav形式の音声ファイルが返ってきます。
※ パラメーター等の詳しい説明は上記マニュアルページをご参照ください。
■ VBAマクロからAPIを使用する
VBAからWeb APIを呼び出す方法は色々ありますが、今回のような場合はWinHttpRequestやXMLHTTPRequestを使うのが簡単です。
問題になるのはBasic認証部分ですが、これもSetRequestHeaderでAuthorizationヘッダーを付ければ問題ありません。
その際ユーザー名とパスワードをBase64エンコードする必要がありますが(Basic認証 参照)、「Gmail APIを使ってメール送信するVBAマクロ(3)」でも使っている関数(EncodeBase64Str)があるので、これをそのまま流用します。
というわけで、書いたサンプルコードが下記になります。
Option Explicit
Public Sub Sample()
Dim url As String
Dim txt As String
Dim pathWavFile As String
Dim dat As Variant
Dim body() As Byte
Const adTypeBinary = 1
Const API_KEY As String = "(APIキー)" 'コードを動かす際はここに受け取ったAPIキーを記載します。
pathWavFile = "C:\Test\TTS.wav"
url = "https://api.voicetext.jp/v1/tts"
txt = "こんばんは。今日も一日暑かったよね。最高気温は36度でした。"
dat = "text=" & EncodeURL(txt) & "&speaker=show"
'ファイル削除
With CreateObject("Scripting.FileSystemObject")
If .FileExists(pathWavFile) Then
.DeleteFile pathWavFile, True
End If
End With
'wavファイルをダウンロードして再生
On Error GoTo Err:
With CreateObject("WinHttp.WinHttpRequest.5.1")
.Open "POST", url, False
.SetRequestHeader "Authorization", "Basic " & EncodeBase64Str(API_KEY & ":")
.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"
.Send dat
Select Case .Status
Case 200
body = .responseBody
With CreateObject("ADODB.Stream")
.Type = adTypeBinary
.Open
.Write body
.SaveToFile pathWavFile
.Close
End With
CreateObject("Shell.Application").ShellExecute pathWavFile
Case Else
MsgBox "処理が失敗しました。" & vbCrLf & vbCrLf & .ResponseText, vbExclamation + vbSystemModal
Exit Sub
End Select
End With
On Error GoTo 0
Exit Sub
Err:
Debug.Print "エラーが発生しました。", Err.Number, Err.Description
End Sub
Private Function EncodeURL(ByVal str As String) As String
'URLエンコード
With CreateObject("ScriptControl")
.Language = "JScript"
EncodeURL = .CodeObject.encodeURIComponent(str)
End With
End Function
Private Function EncodeBase64Str(ByVal str As String) As String
'文字列をBase64エンコード
Dim ret As String
Dim d() As Byte
Const adTypeBinary = 1
Const adTypeText = 2
ret = "" '初期化
On Error Resume Next
With CreateObject("ADODB.Stream")
.Open
.Type = adTypeText
.Charset = "UTF-8"
.WriteText str
.Position = 0
.Type = adTypeBinary
.Position = 3
d = .Read()
.Close
End With
With CreateObject("MSXML2.DOMDocument").createElement("base64")
.DataType = "bin.base64"
.nodeTypedValue = d
ret = .Text
End With
On Error GoTo 0
EncodeBase64Str = ret
End Function
ScriptControlを使っているので64ビット版のOfficeでは動きませんが、32ビット版のOfficeでは無事に動作しました。
これで気分はモヤさまです。
いつでもあのゆる~いVoiceを聴くことができます。
素晴らしいAPIです。
ただし、このAPIの利用には、読み上げる文字は200文字以内、
第6条 (テキスト及び音声データの取り扱い)
ユーザは、本サービスの利用に際し、入力されたテキストおよび出力される音声データの取り扱いについて、次の各号の条件を承諾するものとします。また、本サービスを利用したアプリケーションのエンドユーザに対しても自己の責任により、本規約の内容を承諾させるものとします。
(1)当社が、当社のサーバーに入力されたテキストを、本サービスおよび音声合成技術の改良の目的で利用すること
(2)当社のサーバーから出力された音声データは、本サービスを利用したアプリケーション内のみで使用すること
(3)当社のサーバーから出力された音声データを、直接的または間接的に配布しないこと(但し、当社の事前の書面による承諾がある場合はこの限りではありません)
「VoiceText Web API」サービス利用規約 より
といった制限もありますので、その点はご注意ください。
特に利用規約には必ず目を通すようにしましょう。
今回の記事はここまで。
次回ももうちょっとこのAPIで遊んでみることにします。
→ 続きの記事を書いてみました。
・モヤさまのショウ君にいろいろ喋らせるVBAマクロ(2)
//www.ka-net.org/blog/?p=4718


















この記事へのコメントはありません。