[Alexa] SSMLの組み立てが超便利なssml-builderについて
この記事は、2018/02/15 日本語対応も含め、最新版にリメイクされました。是非、こちらをご参照下さい。
1 はじめに
Speech Synthesis Markup Language SSML(音声合成マークアップ言語 以下、SSML) とは、合成音声の作成を支援するためのXMLベースのマークアップ言語であり、発音、音量、ピッチ、速度などの読み上げに関する様々な制御が可能です。
ssml-builderは、このSSMLの組み立てを支援するパッケージです。
https://www.npmjs.com/package/ssml-builder
Amazon Alexa(以下、Alexa)でも、読み上げる出力にSSMLの指定が可能です。しかし、SSMLタグは、やや複雑で、多用すると混乱を招くことが避けられません。このため、ssml-builderのようなツールを利用することは、非常に有効だと思います。
ssml-builderは、Alexa SDKに対応しており、そのまま利用可能です。
参考:Alexa Skills Kit for Node.js はじめの一歩
2 インストールと基本的な利用方法
インストールは、npmで可能です。
npm install ssml-builder --save
基本的な利用方法は、以下のようになります。発生するテキストとSSMLのタグに相当するものを追加していき、最後にまとめてSSMLのテキストを得るとう形式です。
var Speech = require('ssml-builder'); var speech = new Speech(); speech.say('Hello'); // 'Hello'を追加 speech.pause('1s'); // breakタグを追加(1秒間隔を空ける) speech.say('fellow Alexa developers'); // 'fellow Alexa developers'を追加 var outputText = speech.ssml(true); // SSML出力を得る(trueを指定すると、前後の<speak>タグは省略されます) this.emit(':tell', outputText); // Alexa SDKによるレスポンス作成
上記で出力されるSSML以下の通りです。
<speak> Hello <break time='1s'/> fellow Alexa developers </speak>
3 対応タグ
ssml-builderが対応しているタグは、以下のとおりですが、これは、Alexa Skill Kitのドキュメントに記載されているものが、ほとんど網羅されています。(sub以外全部)
参考:Speech Synthesis Markup Language (SSML) Reference
- amazon:effect
- audio (mp3の埋め込み)
- break (間隔を空ける)
- emphasis (強調)
- prosody (音量、ピッチ、レート)
- p (パラグラフ)
- s (センテンス)
- phoneme (発音記号の指定)
- speak (SSMLのルートタグ)
- say-as (読み方の指定)
- characters
- spell-out
- cardinal
- number
- ordinal
- digits
- fraction
- unit
- date
- time
- telephone
- address
- interjection
- expletive
- w (単語の属性指定)
- ivona:VB: Interpret the word as a verb (present simple).
- ivona:VBD: Interpret the word as a past participle.
- ivona:NN: Interpret the word as a noun.
- ivona:SENSE_1: for more information, see Amazon Documentation here
4 使用方法
細部の使用方法は、ドキュメント化されていないのですが、テストコード(ssml-builder/test/speech_test.js)を見ると、その使い方が分かります。
以下の、その一部の抜粋です。
speech.say("hi"); speech.pause("100ms"); speech.pauseByStrength("x-weak"); speech.audio("http://www.audio.com/sound.mp3"); speech.spell("mandy"); speech.spellSlowly("mandy", "500ms"); speech.sayAs({ "word": "five", "interpret": "cardinal" }); speech.sayAs({ "word": "20070102", "interpret": "date" }); speech.sayAs({ "word": "19:21:30", "interpret": "time", "format": "hms24" }); speech.partOfSpeech({ "word": "read", "role": "ivona:VB" }); speech.phoneme("ipa", "pɪˈkɑːn", "pecan");
Alexa Skill Kit のドキュメント と併せてみれば、ほとんど違和感なく利用できそうです。
5 最後に
今回は、SSMLを簡単に組み立てることができるライブラリ(ssml-builder)を紹介しました。このようなライブラリを活用し、煩雑となりがちなSSMLタグをうまく使いこなしたいと思います。
6 参考リンク
ssml-builder
https://github.com/alexa/alexa-skills-kit-sdk-for-nodejs
Speech Synthesis Markup Language (SSML) Reference