SSML について
Speech Synthesis Markup Language (SSML) は、音声合成アプリケーション用のテキストのアノテーションが用意された XML ベースのマークアップ言語です。 これは、VoiceXML 2.0 仕様による音声合成の標準マークアップ言語として採用された、W3C Voice-Browser Working Group の勧告です。 SSML は、マークアップを介して発音、音量、ピッチ、速度、およびその他の属性を指定できるので、音声アプリケーションの開発者が合成プロセスの各側面を制御するための標準手段になります。 SSMLを使って、サポートされているすべての言語でテキストの合成をコントロールすることができます。
IBM Watson® Text to Speechサービスは、2010年9月7日にW3Cによって勧告されたSSMLバージョン1.1ています。 W3CSSML勧告の詳細については、W3CSpeech Synthesis Markup Language(SSML)Version1.1を参照してください。
SSML の概要
SSML は、事前定義の要素セットまたはタグ・セットを使用して、合成器に渡されるプレーン・テキストを拡張することで動作します。 XML パーサーはまず、プレーン入力テキストとマークアップ指定内容を分離します。 次に、指定内容が処理され、合成器が目的の効果を生成するために理解できる形式の一連の命令として送信されます。 XML パーサーがこのジョブを実行するには、マークアップが適切な形式になっている必要があります。例えば、要素は閉じられている必要があり、また複数の要素がある場合は、適切にネストされている必要があります。 XMLの基本的な概念については、w3schools.com/xml/xml_whatis.aspを参照してください。
SSML 要素は、開始タグとそれに対応する閉じタグの内部に含まれているすべての項目です (開始/閉じタグも含む)。 以下の例に示すように、1 つの要素に、他の要素の組み合わせ (タグをネストできます) とテキストを含めることができます。 また、要素では、特定の値に設定された属性が必須の場合もあれば、オプションとしてそうした属性を受け入れる場合もあります。
<tag1>
<tag2 attributeName="attributeValue">
... some text ...
</tag2>
</tag1>
完全な正しい SSML 文書は XML プロローグで構成されます。このプロローグには、エンコードや、SSML 文書の検証に使用するスキーマなどの情報が含まれ、その後にルート要素 <speak>
が続きます。 <speak>
のスパン内で、合成されるテキストを指定し、追加要素で補強する。
<?xml version="1.0" encoding="UTF-8"?>
<speak version="1.1">
... the body that contains text to be synthesized plus markup ...
</speak>
XML プロローグは、サービスに渡すテキストには必要ありません。 サービスは SSML フラグメントをサポートします。SSML フラグメントは、完全な XML ヘッダーを含まない SSML 要素であり、親要素を含める必要はありません。 例えば、合成のために送信する SSML の場合、 <?xml>
要素と <speak>
要素は常にオプションです。
SSML のサポート
SSMLとその関連機能の使用については、以下を参照してください:
- このサービスは、ほとんどの W3C 仕様を実装し、SSML フラグメントをサポートします。
- このサービスは、拡張されたニューラル音声および表現的なニューラル音声の追加合成機能をサポートします。
- このサービスでは、表現型ニューラル音声の追加の合成機能がサポートされています。
- このサービスは、ドイツ語の音声に対する英数字ストリングのスペルを制御できる合成機能をサポートしています。 詳しくは、 ストリングのスペルアウト方法の指定 を参照してください。
- サービスは、 WebSocket インターフェースで SSML
<mark>
要素を使用して、結果の音声の単語のタイミング情報を取得することをサポートしています。 WebSocket インターフェースでは、入力テキストのすべてのストリングの情報を要求することもできます。 詳しくは、以下を参照してください - サービスのカスタマイズ・インターフェースでは、SSML の
<phoneme>
要素を使用して、単語の発音に使用する表音つづりを指定できます。 表音つづりは、単語の音、それらの音の音節への分割方法、および強勢を受け取る音節を表します。
SSML 検証
このサービスでは、合成用の入力テキストまたはカスタマイズ用の単語のトランスレーションの定義としてコンテンツに含めて送信されたすべての SSML 要素が検証されます。 サービスは、合成用に送られたテキストに SSML 要素が含まれているかどうかを事前に判別することはできません。 したがって、入力テキストに SSML が含まれているかどうかに関係なく、すべての入力テキストに同じ検証が実行されます。
要素および属性の検証
このサービスは、SSML 要素および属性に対して以下の検証を実行します。
-
すべての SSML 入力は、正確かつ適切な形式になっている必要があります。
-
サービスは、サポートされていない SSML 要素をサイレントに無視します。 サービスは、サポートされない要素のタグ内に含まれているテキストを合成します。要素のみが無視されます。
-
サービスは、無効な SSML 要素または属性に対して HTTP 400 エラー・コードを返します。 属性を必要とする SSML 要素を指定する場合:
- 必須属性を指定する必要があります。
- 必須属性に有効な値を指定する必要があります。
- 追加の無効な属性または値を含めると、それらは無視されます。
要求が失敗した場合、エラー応答には説明メッセージが含まれます。 例えば、
<say-as>
エレメントを含む以下の入力テキストを指定するとします。"text": "The price is <say-as interpret-as=\"currency\">$2,500.00</say-as>."
この例では、
interpret-as
属性が必須であり、指定されていますが、その値が無効です。 属性の有効な値はvxml:currency
であり、currency
ではありません。 エラー応答には、以下のメッセージが含まれます。The connection to the Watson Text to Speech service closed with the following error: Tag <say-as> has invalid attribute interpret-as=currency
SSML エラーの要約
表 1 では、多くの一般的な SSML 検証エラーについて説明します。 いずれの場合も、要求は失敗し、サービスは 400 エラー・コードを返します。
検証エラー | 問題の説明 |
---|---|
SSML 要素が無効です | 例えば、タグの指定が誤っている、必須属性が省略されている、開始タグが指定されているのに対応する閉じタグがない、などです。 |
アンエスケープされた XML 制御文字 | The input text itself contains a " , ' , & , < , > , or / character instead of its equivalent escape string or character encoding. 詳しくは、XML 制御文字のエスケープを参照してください。 |
無効な音節強勢 | IBMの <phoneme> 要素の ph 属性。SPRは無効な音節強調を含みます。 音節および音節強勢の指定について詳しくは、 音節の指定 を参照してください。 |
無効な表音記号 | The ph attribute of a <phoneme> element includes an unsupported IPA or SPR symbol for the specified language. |
母音なし | The ph attribute of a <phoneme> element specifies a word pronunciation that includes no vowels. |
無効な場所にあるフランスのリエゾン | In the ph attribute of a <phoneme> element, the liaison character does not follow a consonant or it occurs in the middle of a word's pronunciation. |
日本語の : 記号は母音の前に付かない |
日本語の <phoneme> 要素の ph 属性では、: 文字は母音の前には出現しない(音節境界など他の記号を挟む場合もある)。 |
SSML <prosody> 要素の無効な使用 |
You cannot use the contour , duration , range , and volume attributes of the <prosody> element with any voice. |
SSML <express-as> 要素の無効な使用 |
<express-as> 要素は、表現的なニューラル音声でのみ使用できます。 |