[Alexa] SSMLの組み立てが超便利なssml-builderについて

alexa-eyecatch

1 はじめに

Speech Synthesis Markup Language SSML(音声合成マークアップ言語 以下、SSML) とは、合成音声の作成を支援するためのXMLベースのマークアップ言語であり、発音、音量、ピッチ、速度などの読み上げに関する様々な制御が可能です。

ssml-builderは、このSSMLの組み立てを支援するパッケージです。


https://www.npmjs.com/package/ssml-builder
001

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>

002

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