top of page

FileMakerからVOICEVOXで音声合成する 2/2


こんにちは。ティーマネジメントの田中です。

今回は、前回記事の続きで、クエリから音声合成を行う方法、

FileMakerから音声を再生する方法について解説したいと思います。



音声合成を行う

APIドキュメントの記載を確認します。


音声合成で含めることのできるパラメータが記載されています。


作成したクエリは、変数「$query」へ格納されています。

クエリを元に、音声合成を実行します。


音声合成実行の際も、「URLから挿入」スクリプトステップを使用します。

「URLから挿入」スクリプトステップに使用するパラメータの準備を行います。



ターゲット           ⇒結果として得られる音声ファイルの格納場所を指定します。

URLを指定         ⇒リクエストURLを指定します。

cURLオプションの指定    ⇒curlを指定します。



・ターゲット

結果の音声ファイルを格納しておくフィールド、もしくは変数を指定します。

フィールドを指定する場合、フィールドタイプはオブジェクトにしておいてください。


・URLを指定

"http://localhost:50021/synthesis?speaker=3&enable_interrogative_upspeak=true"

リクエストURLになります。

speakerにはid=3を指定しています。

enable_interrogative_upspeakはtrueとし、ドキュメントにもあるように、疑問形テキストが与えられた場合に語尾を調整するようにします。


・cURLオプションの指定

-X POST -H "accept: audio/wav" -H "Content-Type: application/json" -d [クエリ]

-H(ヘッダ)で、オーディオファイル形式であるwavを指定します。

-d(データ)で、先ほど作成したクエリを指定します。

クエリデータが長いため、ここでは「[クエリ]」という文字列にし、後で変数「$query」とSubstitute関数で置き換えます。


上記を一連の流れにしたスクリプトが下図になります。


スクリプトを実行します。


Utilityテーブルの、「voice」フィールドに結果が格納されるようにしています。

音声ファイルのため、フィールドタイプはオブジェクトにします。

「synthesis」というファイルが返ってきています。

拡張子がないため何のファイルか分かりませんが、中身は音声ファイルとなっています。

「voice.wav」というファイル名にリネームします。

オブジェクトファイルのリネームは、

1テンポラリパス&ファイル名のパスを作る

2先のパスへエクスポート

3パスから挿入

という流れで行えます。

「voice.wav」という音声ファイルが作成でき、フィールドに格納されました。

次は、こちらの音声を再生する方法について解説します。



FileMakerスクリプトから音声を再生する

JavaScriptを使用して音声再生を行います。


JavaScriptの使用のために、レイアウト上にWebビューアが必要になるので、配置していきます。

Webアドレスには、グローバル変数「$$script」と指定します。

この変数は後ほど指定します。

レイアウトモードの左部、オブジェクトタブより、

Webビューアのオブジェクト名を指定します。

ここでは、「webviewer」としています。


「テキストを挿入」スクリプトステップで、「$$script」の内容を指定します。

data:text/html,<!DOCTYPE html>
  <meta charset="utf-8">
  <script type="text/javascript">

     var voice_base64 = "[音声]";
     var voice_datauri = "data:audio/wav;base64," + voice_base64;
     var voice = new Audio(voice_datauri);

     function playSound(){
       voice.play();
     };

  </script>
</html>

「[音声]」には先ほどの「voice.wav」ファイルを、Base64エンコードしたものを指定します。

テキストにすると非常に長くなるため、こちらもSubstitute関数を使って置き換えています。


エンコードにはFileMakerのBase64EncodeRFC関数を使用します。

この関数ではパラメータにRFC番号を指定できます。

音声をエンコードした際、改行が含まれないように、「3548」を引数として設定します。


スクリプトの一連の流れは下図になります。

「WebビューアでJavaScriptを実行」スクリプトステップでは、

レイアウト上に配置しているWebビューアのオブジェクト名を指定します。

また、実行する関数名を指定します。

JavaScriptの「function playSound()~~~」の記述部分より、「playSound」を指定します。


スクリプトを実行することで、音声が流れるため注意してください。



まとめ

FileMakerにおけるcurlのドキュメントはまだ少ないのではないかと思います。

curlは使いこなすことができれば連携の幅が広がります。

こちらの記事がお役に立ちましたら幸いです。

bottom of page