こんにちは。ティーマネジメントの田中です。
今回は、前回記事の続きで、クエリから音声合成を行う方法、
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は使いこなすことができれば連携の幅が広がります。
こちらの記事がお役に立ちましたら幸いです。