【注意】 このドキュメントは、W3CのSpeech Synthesis Markup Language (SSML) Version 1.1 W3C Recommendation 7 September 2010の和訳です。
このドキュメントの正式版はW3Cのサイト上にある英語版であり、このドキュメントには翻訳に起因する誤りがありえます。誤訳、誤植などのご指摘は、訳者までお願い致します。
First Update: 2012年3月10日 | Last Update: 2015年5月16日
このドキュメントに対する正誤表を参照してください。いくつかの規範的な修正が含まれているかもしれません。
翻訳版も参照してください。
Copyright © 2010 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark and document use rules apply.
音声読み上げブラウザ・ワーキンググループは、音声の相互作用によるウェブへのアクセスを可能にする標準の開発に取り組んできました。音声合成マークアップ言語仕様は、この標準のひとつであり、ウェブやその他のアプリケーションにおける合成音声の作成を支援するために豊かなXMLベースのマークアップ言語を提供することを目指しています。このマークアップ言語の本質的な役割は、合成可能なコンテンツの作成者に、合成に対応した様々なプラットフォームにおいて、発音、音量、ピッチ、速度などの読み上げに関する様々な側面を制御するための標準的な方法を提供することです。
この項は、このドキュメントの公開時のステータスについて記述しています。他のドキュメントがこのドキュメントに取って代わることがありえます。現行のW3Cの刊行物およびこの技術報告の最新の改訂版のリストは、http://www.w3.org/TR/のW3C技術報告インデックスにあります。
これは、「音声合成マークアップ言語(SSML)バージョン1.1」の勧告です。音声読み上げブラウザ・アクティビティの一部である音声読み上げブラウザ・ワーキンググループによって作成されました。
コメントはwww-voice@w3.org(アーカイブ)で歓迎されます。W3Cメーリング・リストおよびアーカイブ利用ガイドラインを参照してください。
SSML 1.1の設計は広くレビューされており(コメントの処理を参照)、ワーキンググループの技術要件を満たしています。実装のリストは、関連するテスト・スイートとともにSSML 1.1実装報告に含まれています。ワーキンググループは、コメントに応じて2010年2月23日の勧告案に少しの編集上の変更を行いました。勧告案の変更は付録Gにあります。また、SSML 1.0への下位互換性に関するノートを含むSSML 1.0の変更は、付録Fにあります。
このドキュメントは、より広い自然(人間の)言語の集合をサポートするためにSSML 1.0[SSML]を強化したものです。音声合成技術にとって大きなビジネス市場や新興市場である言語のサポートという点において、SSML 1.0の開発中には母国語を話す人々の参加も専門家の参加も限られていた、あるいは、参加がなかったために、SSMLに設計上の制限があるのであれば、どのような制限なのかを判断するために、W3Cは、SSMLの国際化に関する3つのワークショップを開催しました。中国の北京で2005年10月に開催された最初のワークショップ[WS]では、主に中国語、朝鮮語および日本語に注目し、ギリシアのクレタ島で2006年5月に開催された第2回[WS2]では、主にアラビア語、インドの言語および東欧諸語に注目しました。インドのハイデラーバードで2007年1月に開催した第3回のワークショップ[WS3]では、インドおよび中東の言語に大きく注目しました。これらのワークショップ中に収集された情報は、要件ドキュメント[REQS11]を開発するために利用しました。SSML 1.0の変更は、これらの要件が動機となっています。
このドキュメントは、W3Cメンバー、ソフトウェア開発者、他のW3Cグループ、および他の利害関係者によりレビューされ、W3C勧告として管理者の協賛を得ました。これは確定済みドキュメントであり、参考資料として用いたり、別のドキュメントで引用することができます。勧告の作成におけるW3C の役割は、仕様に注意を引き付け、広範囲な開発を促進することです。これによってウェブの機能性および相互運用性が増強されます。
このドキュメントは、2004年2月5日のW3C特許方針の下で活動しているグループによって作成されました。W3Cは、このグループの成果物に関連するあらゆる特許の開示の公開リストを維持し、このページには特許の開示に関する指示も含まれています。不可欠な請求権(Essential Claim(s))を含んでいると思われる特許に関して実際に知っている人は、W3C特許方針の6項に従って情報を開示しなければなりません。
このドキュメント本体の項は、特別の定めのない限り規範的です。特別に明示されていない限り、このドキュメントの付録は参考情報です。
このW3C仕様は、音声合成マークアップ言語仕様(SSML)として知られており、サン・マイクロシステムズ(米国カリフォルニア州)が所有するJSGFおよび/またはJSMLの仕様に基づいています。JSMLの仕様は、[JSML]にあります。
SSMLは、W3Cのオープンなプロセスにより開発された音声読み上げブラウザ用のより大きなマークアップ仕様集合の一部です。ウェブやその他のアプリケーションにおける合成音声の作成を支援するために豊かなXMLベースのマークアップ言語を提供することを目指しています。このマークアップ言語の本質的な役割は、合成可能なコンテンツの作成者に、合成に対応した様々なプラットフォームにおいて、発音、音量、ピッチ、速度などの音声出力に関する様々な側面を制御するための標準的な方法を提供することです。関連するテキスト入力の標準的なマークアップ方式を確立するための取り組みには[SABLE]があり、これは、様々なXMLベースの音声合成用マークアップを、一つの新たなマークアップに統合しようという試みです。SABLEで行われた取り組みは、音声マークアップ言語用音声合成マークアップ要件[REQS]の定義の主な出発点としても利用されました。それ以後、SABLE自身は、それ以上の開発を行っていません。
SSMLの使用目的は、合成されたコンテンツの質の改善です。マークアップ要素の違いは、合成処理の異なる局面に影響を及ぼします(1.2項を参照)。マークアップは、例えば、XHTMLドキュメントのXSLTやCSS3で自動的に作成するか、人手によるオーサリングで作成できます。マークアップは、完全なSSMLドキュメント(2.2.2項を参照)内に記述したり、別の言語に組み込まれた部分的な断片(2.2.1項を参照)として記述したりすることができます。ただし、他の言語との相互作用をSSML自身の一部として規定することはできません。SSMLに含まれているマークアップの多くは、大半のコンテンツ開発者による利用に適していますが、音素や韻律(例えば音声曲線設計用)のような一部の拡張機能には専門知識が必要かもしれません。
設計と標準化のプロセスは、音声マークアップ言語用音声合成マークアップ要件[REQS]から引き継ぎました。
主な設計上の基準は、次の事項でした。
SSMLをサポートしたTTS(Text-To-Speech)システム(合成プロセッサ)は、ドキュメントを音声出力として再生し、マークアップに含まれている情報を用いて、作成者の意図したとおりにドキュメントを表現することに責任を負います。
ドキュメントの作成: 合成プロセッサに入力されるテキスト・ドキュメントは、自動的に、または、人手によるオーサリングによって、もしくは、これらの方式の組み合わせによって作成できます。SSMLは、ドキュメントの形式を定義しています。
ドキュメントの処理: 下記は、マークアップしたテキストの入力データを自動的に音声出力データに変換し作成するために合成プロセッサが実行する6つの主な処理ステップです。このマークアップ言語は、ドキュメントの作成者(人間またはマシン)が最終的な音声出力を制御できるように、下記の各ステップの制御を可能とするために、十分にリッチであることを目指しています。下記の各ステップは、「マークアップ」と「非マークアップ」に分けていますが、実際には、通常はこれら2つをミックスしたものであり、タグによって異なります。プロセッサは、作成するデータが発音可能である(かつ、理想的には、分かりやすい)ことを保証する最終的な権限を有しています。一般的に、マークアップは、著者が韻律やその他の情報(通常は、プロセッサが独自に取得できない情報)をプロセッサが利用できるようにする方法を提供します。その後の情報の採否や使用方法の判断は、プロセッサ次第です。
XML解析: XMLパーザは、入力されたテキスト・ドキュメントからドキュメン・ツリーとコンテンツを抽出するために用います。このステップで得られる構造、タグ、属性は、次の各ステップに影響を及ぼします。
構造分析: ドキュメントの構造は、ドキュメントを読むべき方法に影響を及ぼします。例えば、段落や文に共通する読み上げパターンが存在したりします。
テキストの正規化: すべての記述言語には、記述形式(表記形式)を会話形式に変換する必要がある特殊な要素があります。テキストの正規化とは、この変換を行なう合成プロセッサの自動処理です。例えば、英語の場合、ドキュメントに「$200」とあるとき、会話では「two hundred dollars」と読み上げられる可能性があります。同様に、「1/2」は、「half」、「January second」、「February first」などと読み上げられるかもしれません。このステップが終了するまでに、読み上げられるテキストは完全にトークンに変換されます。トークンが何で構成されるかの詳細は、言語によって異なります。英語では通常、トークンはスペースで区切られており、それは通常は単語です。トークン化の性質がこれとは異なる言語の場合、この仕様の「単語」という用語は、これに相当する単位を意味します。token要素とw要素内を除き、SSMLのトークンがアークアップ・タグに及ぶことはできません。英語での簡単な例は、「cup<break/>board」で、合成プロセッサは、token要素とw要素の記述の外では、これを、間に休止がある1つのトークン(単語)としてではなく、「cup」と「board」の2つのトークンとして扱うでしょう。この方法で1つのトークンを複数のトークンに分解すると、プロセッサがそれを扱う方法に恐らく影響するでしょう。
マークアップ: say-as要素を入力ドキュメントで用いると、これらの構成子の存在と種類を示して曖昧さを解消できます。マークアップ可能な構成子はまだ定義されていませんが、日付、時間、数、頭字語、金額などが含まれるかもしれません。頭字語や略語の多くは、著者が直接テキストを置換したり、sub要素を用いて扱えることに注意してください。例えば、「BBC」は「B B C」と記述でき、「AAA」は「triple A」と記述できます。この置き換えられた記述形式により、恐らく、元の頭字語は、発音して欲しいと思うとおりに発音されるでしょう。日本語のテキストの場合には、漢字と仮名の両方をサポートする合成プロセッサがあれば、sub要素を用いて、「今日は」が「きょうは」(「kyou wa」=「today」)と読み上げるべきか、「こんにちは」(「konnichiwa」=「hello」)と読み上げるべきかを区別できます。
非マークアップ: say-as要素でマークアップされていないテキストの場合、合成プロセッサがこれらの構成子を自動的に見つけ出し、読み上げに適した形に変換するにはかなりの労力が必要です。内在する曖昧さ(上記の「1/2」の例のような)のため、また、ある言語に想定される構成子の範囲が広いため、この処理によって音声出力にエラーが生じるかもしれないし、同じドキュメントに対して異なるプロセッサが異なる表現を行う原因となるかもしれません。
テキストから音素への変換: 合成プロセッサがトークンを読み上げる場合には、トークンごとの発音を基にするはずです。発音は、便宜上、音素の列として表現され、これは、ある単語を別の単語と区別する機能を果たす単語の音の単位です。各言語(ある言語の異なる国の言葉や方言の場合もある)は、独自の音素を持っています。例えば、ほとんどのアメリカ英語方言には約45の音素があり、ハワイ語には12から18(誰に尋ねるかによる)、一部の言葉には100以上もあります! この変換は、多くの問題によって複雑になっています。問題のひとつは、言語の記述形式と会話形式に違いがあるということで、この違いによって、記述された単語の発音が確定できなかったり曖昧になる場合があります。例えば、ヘブライ語とアラビア語の単語は通常、その会話形式と比較して、母音が記述されなかったり、ほんの一部の母音が記述されるだけだったりします。多くの言語では、記述された一つの単語に多くの読み上げ方がありえます。例えば、英語の場合、「read」は「リード(reed)」(I will read the book)と読んだり、「レッド(red)」(I have read the book)と読んだりします。人間も合成プロセッサも、これらの単語を文脈に基づいて正確に発音できますが、文脈がない場合には困難なことがあります(下記の「非マークアップ」を参照)。もう一つの問題は、標準的でない綴りや発音を持つ単語の扱いです。例えば、英語の合成プロセッサは、「Caius College」(「keys college」と発音する)やTito(「sutto」と発音する)大統領、Kiribati(「kiribass」と発音する)共和国の大統領など、一部の英語由来でない名前の読み上げ方を決める際にしばしば苦労するでしょう。
マークアップ: phoneme(音素)要素によって、任意のトークンやトークンの列に音素の列を付与することができます。これにより、コンテンツの作成者は、発音を明確に制御できます。テキストが固有名詞であり、合成プロセッサが特別な規則を適用してその発音を決定できることを示すためにsay-as要素を用いることもありえます。lexicon要素とlookup要素は、発音の外部定義を参照するために使用できます。これらの要素は特に、プロセッサが自身のテキストの正規化では解決できず、テキストを直接置換したりsub要素を用いても対処できない頭字語や略語に役立ちます(上記の第3段落を参照)。
非マークアップ: phoneme要素が記述されていない場合には、合成プロセッサは、自動的に発音を決定する機能を適用しなければなりません(MUST)。これは通常、発音辞書(ある言語に依存するかもしれない)でトークンを調べ、他の発音を決定する規則を適用することで達成されます。合成プロセッサは、ほとんどのドキュメントのほとんどの単語を自動的に扱えるようなテキストの音素変換を実行できるように設計されています。作成者は、プロセッサに頼るのではなく、SSMLでコード化する前に一部の変換自身を行なうことも選択できます。発音が不確定または曖昧な書き言葉を、明確な発音の言葉に置き換えることができるかもしれません。例えば「read」の場合、「I will reed the book」にするなどが考えらえます。しかし、作成されるSSMLドキュメントは、視覚表示には不向きでありえることを作成者は知っているべきです。
韻律分析: 韻律は、ピッチ(イントネーションやメロディーとも呼ばれる)、タイミング(またはリズム)、休止、読み上げ速度、単語の強調やその他の多くの特性を含む音声出力特性の集合です。人間に近い韻律を作り出すことは、自然な読み上げ音声を生成したり、読み上げられた言葉の意味を正確に伝えるために重要です。
マークアップ: ドキュメントの作成者は、合成プロセッサが音声出力時に適切な韻律特性を生成できるようにするために、emphasis(強調)、break(休止)、prosody(韻律)の要素のすべてを使用できます。
非マークアップ: これらの要素が記述されていない場合には、合成プロセッサは、自動的に適切な韻律を生成することに長けています(しかし完全ではない)。これは、入力されたテキストから推測できるドキュメントの構造、文法やその他の情報の解析により達成されます。
SSMLのほとんどの要素は、読み上げ用のコンテンツか形式的な論理記述かのどちらかを提供するという点において、高レベルであると考えることができます。しかし、上記のbreak要素とprosody要素は、より後の処理で実行されるため、emphasis要素の使用との共存と、プロセッサ独自の韻律との共存の両方を行わなければなりません。しかるべき項で指定されていない場合には、プロセッサ独自の決定と、このレベルで著者が提供する記述との相互作用の詳細は、プロセッサによって異なります。作成者は、これらの2つのレベルの制御を偶然あるいは恣意的に組み合わせないようにしてください。
波形の作成: 合成プロセッサは、オーディオの波形を作成する際に、音素と韻律の情報を用います。この処理段階には多くのアプローチがあるため、プロセッサ独自のバリエーションがかなりありえます。
合成プロセッサが読み上げるマークアップ・ドキュメントの作成者には様々な人がいます。ドキュメントの作成者(人間とマシンを含む)がすべて、すべての要素または前項で述べた各処理ステップで使用できる情報にアクセスできるとは限りません。下記は、一部の一般的な例です。
ドキュメントの作成者は、テキストをマークアップするための情報にアクセスできません。合成プロセッサ内のすべての処理ステップは、生のテキスト上で全自動で行なわれなければなりません。ドキュメントにspeak要素を記述するだけでコンテンツが読み上げ可能であることを示すことができます。
テキストのマークアップをプログラムで行う場合には、その作成プログラムは、ドキュメントの一部またはすべての構造および/または特殊なテキスト構成子に関して特定の知識を持っているかもしれません。例えば、電子メール・リーダーは、電子メールの受信日時の箇所をマークアップできます。このようなアプリケーションは、構造、テキストの正規化、韻律および恐らくテキストから音素への変換に影響を与える要素を使用できます。
ドキュメントの作成者のなかには、プラットフォームの全体で一貫した読み上げ品質を保証し、より正確に出力品質を定められるように、出来る限り詳細にドキュメントを記述しようと相当な努力を行う人もいます。この場合、音声出力をしっかりと管理するために、利用可能な要素の一部またはすべてをマークアップに使用できます。例えば、テレフォニー(telephony)や音声読み上げブラウザのアプリケーションが作成したメッセージを調整して、システム全体の有効性を最大限に高めることができます。
最も高度なドキュメントの作成者は、より高いレベルのマークアップ(構造、テキストの正規化、テキストから音素への変換、韻律解析)をスキップし、ドキュメントの部分や全体に対し、低レベルの音声合成マークアップを作成するかも知れません。通常これには、音素の列を作成するツールに加え、ピッチとタイミングの情報が必要です。例えば、「コピー合成」や「韻律の移植」を行うツールは、録音データの特性をコピーして人間のスピーチを模倣しようとします。
下記は、マークアップした合成ドキュメントを作成するアーキテクチャや設計の重要な実例です。この言語の設計は、これらの各アプローチの促進を目的としています。
対話言語: 音声読み上げブラウザ・ワーキンググループが作成する対話記述ドキュメントに、SSMLでマークアップされたドキュメントを含めることができるべき(SHOULD)であることが要求されます。
オーラルCSS(ACSS)との相互運用性: オーラルCSSに対応したHTMLプロセッサは、SSMLを作成できます。ACSSについては、CSS2(Cascading Style Sheets, level 2)仕様の19項[CSS2 19項]で取り上げています。このように音声合成を用いることによって、既存のHTMLとXHTMLコンテンツのアクセシビリティの改善が促進されます。
アプリケーション固有のスタイル・シートの処理: 上記のとおり、読み上げるテキストの内容について知識を持っているアプリケーションにはいくつかの種類があり、それを音声合成のマークアップに組み込んで、ドキュメントの表現を強化することができます。多くの場合、アプリケーションは、スタイル・シートを用いて既存のXMLドキュメントをSSMLに変換すると予想されます。これは、HTMLにACSSを用いるのと等しく、ここでも、SSMLは作成された表現として合成プロセッサに渡されることになります。その意味で、SSMLは、空間オーディオを除き、ACSS[CSS2 19項]の上位集合と見なせます。
SSMLは、発音、音量、ピッチ、速度などの合成音声作成の全体的な特性を指定する標準的な方法を提供します。しかし、異なる種類のプロセッサにまたがる合成音声出力に関する厳密な仕様は、このドキュメントの範囲外です。
明示されていない場合には、マークアップの値は、絶対的な値ではなく単なる指示です。例えば、作成者はテキストの断片の時間長を明示でき、さらにそのテキストの断片の部分集合の時間長を明示すこともできます。この2つの時間長によって、合成プロセッサが合理的に表現できないテキストの断片が生じる場合には、プロセッサは、そのテキストの断片の表現に必要な時間長に変更することが認められています。
anyURI
プリミティブであると定義されています。参考までに、[RFC3986]と[RFC2732]は、構造、フォーマットやURIの使用について理解するのに役立つかもしれません。IRI([RFC3987]を参照)が上記のURIの定義の範囲内で認められていることに注意してください。相対URI参照は、3.1.3.1項で示している規則によって解決されなければなりません(MUST)。この仕様では、例えばaudio要素とlexicon要素の場合のように、URIを要素の属性として指示します。正当なスタンドアロンの音声合成マークアップ言語ドキュメントには、正当なXMLプロローグ[XML 1.0または必要に応じてXML 1.1 2.8項]がなければなりません(MUST)。
XMLプロローグの次にルートのspeak要素が来ます。この要素の詳細については、3.1.1項を参照してください。
speak要素では、SSML名前空間を指定しなければなりません(MUST)。これは、xmlns
属性または接頭辞「xmlns」を持つ属性の宣言により達成できます。詳細は[XMLNS 1.0または必要に応じてXMLNS 1.1 2項]を参照してください。xmlns
属性のみを用いた場合、それが出現する要素と子要素に対し、デフォルトの名前空間が設定されることに注意してください。SSMLの名前空間は、http://www.w3.org/2001/10/synthesisであると定義されています。
[SCHEMA1 2.6.3項]にあるxsi:schemaLocation
属性を用いて、speak要素で適切なSSMLスキーマ(付録Dを参照)の位置も指し示すことを推奨します(RECOMMENDED)。この指示は必須ではありませんが、このドキュメントでは、これを促進するために、すべての例に対してそのような指示を行っています。この属性が付与されていない場合には、コア・プロファイル[2.2.5項]を前提としなければなりません(MUST)。
下記は、2つの正当なSSMLヘッダの例です。
<?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US">
<?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
ルートのspeak要素内にその他のすべての要素やテキストを記述する前に、meta、metadata、lexiconの要素を記述しなければなりません(MUST)。この仕様では、要素の順序に関し、その他の制約はありません。
次の場合、ドキュメントの断片は適合コア音声合成マークアップ言語断片です。
次の場合、ドキュメントの断片は適合拡張音声合成マークアップ言語断片です。
次の両方の条件を満たす場合、ドキュメントは適合スタンドアロン・コア音声合成マークアップ言語ドキュメントです。
次の両方の条件を満たす場合、ドキュメントは適合スタンドアロン拡張音声合成マークアップ言語ドキュメントです。
SSMLの仕様やこれらの適合基準は、合成ドキュメントのいかなる側面に対してもサイズの制限を定めません。属性値の要素数、文字のデータ量、文字数に上限値はありません。
合成名前空間は、XML勧告の適切な名前空間に従った他のXML名前空間(使用されているXMLのバージョンにより1.0[XMLNS 1.0]あるいは1.1[XMLNS 1.1])と共に使用することもできます(MAY)。W3Cによる取り組みにより、将来的には、複数の名前空間を含むドキュメントの適合性を指定する方法が出現するでしょう。言語固有(つまり、非SSML)の要素と属性は、適切な名前空間を用いて、SSMLに挿入できます。しかし、このようなコンテンツを表現できるのは、特製のマークアップをサポートした合成プロセッサのみでしょう。以下に、SSMLにルビ[RUBY]要素を挿入する方法の一例を示します。
<?xml version="1.0" encoding="UTF-8"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="ja"> <!-- It's 20 July today. --> <s>今日は七月 <xhtml:ruby> <xhtml:rb>二十日</xhtml:rb> <xhtml:rt role="alphabet:x-JEITA">ハツカ</xhtml:rt> </xhtml:ruby> です。 </s> <!-- It's 20 July today. --> <s>今日は七月 <xhtml:ruby> <xhtml:rb>二十日</xhtml:rb> <xhtml:rt role="alphabet:x-JEITA">ニジューニチ</xhtml:rt> </xhtml:ruby> です。 </s> </speak>
適合音声合成マークアップ言語プロセッサでは、XMLパーサは、XML 1.0[XML 1.0]、XML 1.1[[XML 1.1]および対応するXML(1.0[XMLNS 1.0]と1.1[XMLNS 1.1])の名前空間のバージョンで定義されているすべてのXML構成子を解析し処理できなければなりません(MUST)。このXMLパーサは、そのスキーマやDTDを用いてSSMLドキュメントの検証を行なう必要はありません。これは、SSMLドキュメントの処理中に、外部のDTDで定義されている外部エンティティー参照を適用または拡張するか否かは任意である(OPTIONAL)ことを示唆しています。
適合音声合成マークアップ言語プロセッサは、自然(人間の)言語を扱うために、次の要件を満たさなければなりません(MUST)。
音声合成マークアップ言語プロセッサの性能特性に関する適合要件はありません。例えば、プロセッサが作成する読み上げの正確さ、速度やその他の特性に関するステートメントは必須ではありません。音声合成マークアップ言語プロセッサがサポートしなければならない入力データのサイズに関するステートメントは作成されません。
コア音声合成マークアップ言語プロセッサは、適合スタンドアロン・コア音声合成マークアップ言語ドキュメントを解析し処理できる適合音声合成マークアップ言語プロセッサです。
適合コア音声合成マークアップ言語プロセッサは、コア・プロファイルの要素と属性のセマンティクスをこのドキュメントで記述しているとおりに正確に理解し適用しなければなりません(MUST)。
適合コア音声合成マークアップ言語プロセッサがコア・プロファイルに含まれている以外の要素や属性に遭遇した場合、次のとおりにすることができます(MAY)。
拡張音声合成マークアップ言語プロセッサは、適合スタンドアロン拡張音声合成マークアップ言語ドキュメントを解析し処理できる適合音声合成マークアップ言語プロセッサです。
適合拡張音声合成マークアップ言語プロセッサは、拡張プロファイルの要素と属性のセマンティクスをこのドキュメントで記述しているとおりに正確に理解し適用しなければなりません(MUST)。
適合拡張音声合成マークアップ言語プロセッサが拡張プロファイルに含まれている以外の要素や属性に遭遇した場合、次のとおりにすることができます(MAY)。
SSMLプロファイルは、SSMLの要素と属性の集合です。このドキュメントには、定義済みのプロファイルが2つだけあります。
clipBegin
、clipEnd
、repeatCount
、repeatDur
、soundLevel
、speed
の属性以外の、この仕様で定義されているすべての要素と属性で構成されます。適合ユーザ・エージェントは、SSMLドキュメントを入力データとして受け入れ、著者が意図するとおりにドキュメントを表現するために、マークアップに含まれている情報を用いて読み上げ出力データを作成できる適合音声合成マークアップ言語プロセッサです。適合ユーザ・エージェントは、少なくとも1つの自然言語をサポートしなければなりません(MUST)。
出力データが、入力データに含まれているすべてのマークアップを正確に表現したものであることを保証することはできないため、正確さに関する適合要件はありません。しかし、適合テストでは、適合性を判断するために、参照ドキュメントの正確な合成の例をいくつか要求することができます(MAY)。
SMIL(Synchronized Multimedia Integration Language、「スマイル」と発音)[SMIL3]は、シンプルなインタラクティブ型視聴覚表現のオーサリングを可能とします。一般的にSMILは、ストリーミングのオーディオやビデオを画像やテキスト、その他のメディア・タイプと統合させた「リッチ・メディア」/マルチメディアの表現に用いられます。SMILは、HTMLのように容易に学べる言語で、SMILによる表現の多くは、単純なテキスト・エディターで記述されます。付録EのSMIL/SSMLの統合例を参照してください。
ACSS(Aural Cascading Style Sheets)[CSS2 19項]は、テキストをオーディオに合成する際に役立つ要素を加えることで、ドキュメント(HTMLのような)の標準的な視覚形式を強化するために用いられます。SSMLと比較して、ACSSで作成されるドキュメントは、音源の三次元位置の指定を含むより複雑なオーディオ・シーケンスの指定が可能です。他のACSS要素の多くは、特に音声の種類/質の仕様に関して、SSML機能性と重複しています。SSMLは、空間オーディオを除き、ACSSの性能上の上位集合と見なせます。
VoiceXML(Voice Extensible Markup Language)[VXML]は、ウェブ・ベースのインタラクティブ型音声応答アプリケーションの開発とコンテンツの提供を可能とします(音声読み上げブラウザを参照)。VoiceXMLは、音声合成、ディジタル化されたオーディオの録音・再生、音声認識、DTMF入力、テレフォニー・コール制御、フォームによる混合主導型対話をサポートしています。VoiceXML 2.0は、SSMLを拡張し、テキストのマークアップを合成できるようにします。VoiceXMLとSSMLとの統合の例に関しては、付録Fを参照してください。
SSMLドキュメントの取得とキャッシングは、合成プロセッサが作動する環境によって規定されます。例えば、VoiceXMLインタープリターの環境では、キャッシング・ポリシーは、VoiceXMLインタープリターによって決まります。
この仕様では、次の要素と属性を定義しています。
音声合成マークアップ言語は、XMLアプリケーションです。ルート要素はspeakです。
xml:lang
は、ルート・ドキュメントの言語を指定する必須の(REQUIRED)属性です。
xml:base
は、ルート・ドキュメントの基底URIを指定する任意の(OPTIONAL)属性です。
onlangfailure
は、読み上げに失敗したときの望ましい挙動を指定する任意の(OPTIONAL)属性です。
version
属性は、ドキュメントに用いる仕様のバージョンを示す必須の(REQUIRED)属性で、「1.1」という値でなければなりません(MUST)。
トリミング属性に関しては、以下の小項目で定めています。
合成プロセッサは、speak要素の実行前にデフォルトの音声を選択しなければなりません(MUST)。デフォルトの音声ではテキストの言語を読み上げられない場合には、最初のテキストに遭遇するとすぐに読み上げ失敗(3.1.13項を参照)が発生することに注意してください。もちろん、これは、テキストに遭遇する前に音声が変更されていないことが前提となります。
<?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US"> ... the body ... </speak>
speak要素には、表示用テキストとaudio、break、emphasis、lang、lexicon、lookup、mark、meta、metadata、p、phoneme、prosody、say-as、sub、s、token、voice、wの要素のみを含むことができます。
トリミング属性は、ドキュメントの再生範囲を定義します。speakコンテンツ内の範囲の開始と終了は、両方ともマークを用いて指定できます。
speakには、次のトリミング属性が定義されています。
名前 | 必須 | タイプ | デフォルト値 | 説明 |
---|---|---|---|---|
startmark |
false | タイプ xsd:token [SCHEMA2 3.3.2項] |
なし | 再生の開始を指定するために用いるマーク。 |
endmark |
false | タイプ xsd:token [SCHEMA2 3.3.2項] |
なし | 再生の終了を指定するために用いるマーク。 |
startmark
属性とendmark
属性で、mark要素のname
属性で割り当てるのと同じようなマーカーを参照する名前を指定します。ドキュメントで一度定義されているマーカーのみ(つまり、ユニークであるもの)が、startmark
やendmark
の値となりえます。ドキュメントの再生範囲の決定は、次のとおりに行われます。
startmark
が指定されている場合、再生はstartmark
から開始されます。startmark
が指定されていない場合、再生はドキュメントの最初から開始されます。endmark
が指定されている場合、再生はendmark
で終了します。endmark
が指定されていない場合、再生はドキュメントの最後で終了します。startmark
がendmark
より後にある場合には、オーディオは作成されません。startmark
またはendmark
のいずれかに付与されている値がドキュメントにおいて有効なマークでない場合はエラーです。
トリミング属性が指定されていない場合、ドキュメントのすべてが再生されます。
<speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US"> <audio src="first.wav"/> <mark name="mark1"/> <audio src="middle.wav"/> <mark name="mark2"/> <audio src="last.wav"/> </speak>
この例では、「first.wav」、「middle.wav」、「last.wav」が再生され、「mark2」というマークが再生される最後のマークです。
startmark
は、指定したマークから再生を開始することを示すために使用できます。
<speak startmark="mark1" version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US"> <audio src="first.wav"/> <mark name="mark1"/> <audio src="middle.wav"/> <mark name="mark2"/> <audio src="last.wav"/> </speak>
「middle.wav」と「last.wav」は再生されますが、「first.wav」は、「mark1」というstartmark
の前にあるため、再生されません。
再生の終了は、endmark
を使用して指定できます。
<speak endmark="mark2" version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US"> <audio src="first.wav"/> <mark name="mark1"/> <audio src="middle.wav"/> <mark name="mark2"/> <audio src="last.wav"/> </speak>
この場合、「first.wav」と「middle.wav」は完全に再生されますが、「last.wav」は全く再生されません。
最後に、これらのトリミング属性を、再生の開始と終了の両方を制御するために使用できます。
<speak startmark="mark1" endmark="mark2" version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US"> <audio src="first.wav"/> <mark name="mark1"/> <audio src="middle.wav"/> <mark name="mark2"/> <audio src="last.wav"/> </speak>
この場合、「middle.wav」のみが再生されます。
xml:lang
属性XML[XML 1.0または必要に応じてXML 1.1 2.12項]で定義されているとおり、xml:lang
属性は、この属性が記述されている要素の記述内容の自然言語を示すためにSSMLで使用できます(MAY)。BCP47[BCP47]は、この属性の使用方法を理解する際に役立ちます。
言語情報は、ドキュメントの下位階層にまで継承されます。つまり、ドキュメント全体が1つの言語で記述されていれば、言語情報は一度だけ付与すれば良いです。また、言語情報は入れ子に記述されます。つまり、内側の属性の記述が外側の属性に優先します。
xml:lang
は、speak、lang、desc、p、s、token、wの要素に対する定義済み属性です。
xml:lang
は、p、s、tokenとwにおいてのみ認められており、これは、これらのレベルで言語を変更することが一般的であるという理由によります。
合成プロセッサは、xml:lang
属性の値を用いて、この属性が記述されている要素のコンテンツを最もうまく再生する方法を決定する際に役に立てるべきです(SHOULD)。読み上げ方が分からないテキストに遭遇した場合に、どうすべきかの決定は合成プロセッサの責任です(onlangfailure
属性を参照)。この決定を行うために利用できる情報源の1つがxml:lang
属性の値です。
合成プロセッサは、xml:lang
属性の値でコンテンツの言語を判断することもでき、もちろんこれは、音声によるコンテンツの読み上げ方に影響します。例えば、「The French word for cat is <lang xml:lang="fr">chat</lang>, not chat.
」(フランス語でcatは<lang xml:lang="fr">chat</lang>であり、chatではない。)。ドキュメントの作成者が新たな言語に適した新たな読み上げを必要とする場合には、voice要素により、合成プロセッサが新たな読み上げを選択することを明示的に求めることができます。読み上げの選択に関する詳細情報は、3.2.1項で記述しています。
テキスト正規化処理のステップは、記述されている言語の影響を受けるかもしれません。これは、say-asによるマークアップと非マークアップの両方に当てはまります。次の例では、「2/1/2000」という同じテキストが、最初の文ではアメリカ英語の発音規則に従って「February first two thousand」と読み上げられ、2番目の文ではイタリア語の前処理規則に従って「the second of January two thousand」と読み上げられるかもしれません。
<?xml version="1.0" encoding="ISO-8859-1"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US"> <s>Today, 2/1/2000.</s> <!-- Today, February first two thousand --> <s xml:lang="it">Un mese fa, 2/1/2000.</s> <!-- Un mese fa, il due gennaio duemila --> <!-- One month ago, the second of January two thousand --> </speak>
xml:base
属性相対URIは、基底URIにより解決され、様々な情報源のものであることができます。著者は、基底URI宣言によりドキュメントの基底URIを明示的に指定できるようになります。相対URIの解決に関する詳細は、3.1.3.1項を参照してください。
基底URI宣言は、認められていますが、任意です(OPTIONAL)。これにより、次の2つの要素が影響を受けます。
- audio
- 任意の(OPTIONAL)属性である
src
で、相対URIを指定できます。- lexicon
uri
属性で、相対URIを指定できます。
基底URI宣言は、[XML-BASE]に従い、ルートのspeak要素内にxml:base
属性で指定します。
<?xml version="1.0"?> <speak version="1.1" xml:lang="en-US" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:base="http://www.example.com/base-file-path">
<?xml version="1.0"?> <speak version="1.1" xml:lang="en-US" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:base="http://www.example.com/another-base-file-path">
ユーザ・エージェントは、[RFC3986]に従って基底URIの演算を行い、相対URIを解決しなければなりません(MUST)。下記は、RFC3986を合成ドキュメントに適用する方法について説明しています。
ユーザ・エージェントは、次の優先順序(上位から順に列挙)に従って基底URIの演算を行わなければなりません(MUST)
xml:base
属性で設定する(3.1.3項を参照)。xml:id
属性xml:id
属性[XML-ID]は、SSMLにおいて、要素にドキュメント独自の識別子を付与するために使用でき(MAY)、これにより、その要素を他のドキュメントから参照可能になります。
xml:id
は、lexicon、p、s、token、wの要素に対する定義済み属性です。
SSMLドキュメントは、複数の辞書(Lexicon)ドキュメントを参照できます(MAY)。辞書ドキュメントは、位置をURIで示し、任意の(OPTIONAL)メディア・タイプを有し、SSMLドキュメントにおいて固有の名前を割り当てられます。
lexicon要素は、speak要素の直下の子要素としていくつでも置くことができます(MAY)。
lexicon要素には、辞書ドキュメントの位置を識別するURIを指定するuri
属性がなければなりません(MUST)。
lexicon要素には、辞書ドキュメントに名前を割り当てるxml:id
属性がなければなりません(MUST)。名前は、現行SSMLドキュメント内で一意でなければなりません(MUST)。この名前は、現行SSMLドキュメントを範囲とします。
lexicon要素には、辞書ドキュメントのメディア・タイプを指定するtype
属性を記述できます(MAY)。type
属性のデフォルト値はapplication/pls+xml
で、[RFC4267]で定義されている発音辞書仕様[PLS]ドキュメントに関連付けられたメディア・タイプです。
lexicon要素には、データ取得のタイムアウトを指定するfetchtimeout
属性を記述できます(MAY)。その値は、時間指定です。デフォルト値は、プロセッサによって異なります。
lexicon要素には、指定された有効期限を超えないコンテンツをドキュメントで使用する意思があることを示すmaxage
属性を記述できます(MAY)(HTTP 1.1[RFC2616]の「max-age」を参照)。値はxsd:nonNegativeInteger[SCHEMA2 3.3.20項]です。maxstale
が併記されていなければ、ドキュメントは期限を超えたコンテンツを使用しようとしません。
lexicon要素には、有効期限を超えたコンテンツをドキュメントで使用する意思があることを示すmaxstale
属性を記述できます(MAY)(HTTP 1.1[RFC2616]の「max-stale」を参照)。値はxsd:nonNegativeInteger[SCHEMA2 3.3.20項]です。maxstale
に値が割り当てられている場合、ドキュメントは指定された時間だけ有効期限を超えたコンテンツを受け入れようとします。
lexicon要素は空要素です。
辞書ドキュメントを取得または解析する際にエラーが生じた場合は、合成プロセッサはそのエラーの発生についてホスティング環境に通知しなければなりません(MUST)。プロセッサは、非同期イベントで直ちにホスティング環境に通知できます(MAY)。または、プロセッサは、ログ記録システムを用いてエラーを通知できます(MAY)。可能であれば、プロセッサは、エラーに関する情報を含むべきです(SHOULD)。例えば、HTTP 404エラーにより辞書を取得できなかった場合には、そのエラー・コードを通知に含むことができるかもしれません。プロセッサは、通知後、空の有効な辞書を読み込んだかのように処理を継続しなければなりません(MUST)。
注: 以下の記述や表では、x-vnd.example.lexicon
というタイプの架空のベンダー固有の辞書を使用します。これは、必要に応じて、あらゆるフォーマットが返されるまたは提供されることを意味します。
URI参照で指定されている辞書資源は、複数のメディア・タイプで利用可能でありえます。SSMLの作成者は、type
属性により、望ましいメディア・タイプを指定できます。1つのURIで表されるコンテンツが多くのデータ・フォーマットで利用可能な場合、合成プロセッサは、望ましいタイプを用いて複数のフォーマットのうちのどれを使用するかを制御できます(MAY)。例えば、HTTP内容交渉を実行するサーバでは、プロセッサは、そのタイプを用いて交渉の優先順序を指示できます。
配信に関しては、URI参照で指定されている資源を、2つのタイプの観点で検討できます。宣言されているメディア・タイプ(declared media type)は、資源が提示する値であり、実際のメディア・タイプ(actual media type)は、そのコンテンツの本当のフォーマットです。実際のタイプは、宣言されているタイプと同じであるべきですが、必ずしもそうとは限りません(例えば、設定が正しくないHTTPサーバは、ベンダー固有のx-vnd.example.lexicon
フォーマットに従ったドキュメントに対しtext/plain
を返すかもしれない)。特定のURIスキームは、資源の所有者が、メディア・タイプを常に返す、時々返す、あるいは決して返さないことを要求できます。タイプが返された場合には、常にそれが正式なものとして扱われます。宣言されているメディア・タイプは、資源の所有者が返した値で決まるか、何も返されない場合には、SSMLドキュメントに記述されている望ましいメディア・タイプによって決まります。
3つの特殊なケースが発生しえます。プロセッサが宣言されているタイプをサポートしていない場合はエラーです。宣言されているタイプをサポートしているものの、実際のタイプとは一致していない場合もエラーです。最後に、メディア・タイプが宣言されていない場合、その挙動は、合成プロセッサの特定のURIスキームと性能に依存します。例えば、HTTP 1.1では、ドキュメントの検査が可能で([RFC2616 7.2.1項]を参照)、データ・スキームはデフォルトのメディア・タイプに戻り、ローカル・ファイル・アクセスはガイドラインを定義しません。次の表で、いくつかの参考となる例を挙げています。
HTTP 1.1リクエスト |
ローカル・ファイル・アクセス |
|||
---|---|---|---|---|
資源の所有者が返すメディア・タイプ | text/plain | x-vnd.example.lexicon | <なし> | <なし> |
SSMLドキュメントの望ましいメディア・タイプ | 該当しない。返されるタイプが正式なもの。 | x-vnd.example.lexicon | application/pls+xml | |
宣言されているメディア・タイプ | text/plain | x-vnd.example.lexicon | x-vnd.example.lexicon | <なし> |
x-vnd.example.lexiconの実際のメディア・タイプに対する挙動 | これは、text/plainとして処理されなければならない(MUST)。text/plainがサポートされていない場合や想定されているフォーマットをドキュメントがフォローできない場合は、エラーとなるだろう。 | 宣言されているタイプと実際のタイプが一致。合成プロセッサがx-vnd.example.lexiconをサポートしている場合は成功、そうでなければエラー。 | スキームによる。合成プロセッサは、ドキュメントの検査を行い、タイプを決定するかもしれない。 |
lookup要素にはref
属性がなければなりません(MUST)。ref
属性は、辞書ドキュメントを参照する名前を、lexicon要素のxml:id
属性で割り当てられているとおりに指定します。
参照する辞書ドキュメントには、表示用テキストとして表示されるトークンに関する情報(例えば、発音)が含まれていることがあります。PLS辞書ドキュメントの場合、合成プロセッサは、lookup要素のコンテキスト内にトークンを表示するときに、PLSドキュメントに含まれている情報を使用しなければなりません(MUST)。非PLS辞書ドキュメントの場合、合成プロセッサは、lookup要素のコンテンツ内にトークンを表示するときに、その辞書ドキュメントに含まれている情報を使用すべきです(SHOULD)。ただし、SSMLドキュメントの内容と互換性がないと見なされる場合には、プロセッサは情報を使用しないことを選択することもできます(MAY)。例えば、ベンダー固有の辞書を、say-as要素のinterpret-as
の特定の値や特定の音声にのみ用いることもできます。SSMLのコンテンツが非PLS辞書を参照するときには、ベンダーは、合成プロセッサに求める挙動を記録すべきです(SHOULD)。
lookup要素には別のlookup要素を含むことができます(MAY)。lookup要素が別のlookup要素を含んでいる場合には、子要素のlookupの方が優先度が高いです。優先度とは、優先度が最も高い辞書で最初にトークンを調べるということを意味します。その辞書でトークンが見つからない場合にのみ、次の優先度の辞書で調べるというように、トークンが見つかるか、すべての辞書を調べ尽くすまで行います。合成プロセッサは、複数のシステム辞書を既に内蔵していると想定され、これらは、lexiconとlookupの要素を用いて指定される辞書より優先度が低いものとして扱われます。少なくとも1つのlookup要素の範囲内にトークンがない場合、そのトークンは、内蔵のシステム辞書でのみ調べることができることに注意してください。
lookup要素には、表示用テキストとaudio、break、emphasis、lang、lookup、mark、p、phoneme、prosody、say-as、sub、s、token、voice、wの要素のみを含むことができます。
<?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US"> <lexicon uri="http://www.example.com/lexicon.pls" xml:id="pls"/> <lexicon uri="http://www.example.com/strange-words.file" xml:id="sw" type="media-type"/> <lookup ref="pls"> tokens here are looked up in lexicon.pls <lookup ref="sw"> tokens here are looked up first in strange-words.file and then, if not found, in lexicon.pls </lookup> tokens here are looked up in lexicon.pls </lookup> tokens here are not looked up in lexicon documents ... </speak>
metadata要素とmeta要素は、ドキュメントに関する情報を置くことができるコンテナです。metadata要素は、メタデータ・スキーマを用いて、metaよりも汎用的でより強力なメタデータ情報の処理が可能になります。
meta宣言は、宣言されたmetaプロパティーに文字列を関連付けるか、「http-equiv」のcontentを宣言します。name
属性かhttp-equiv
属性のいずれかが必須です(REQUIRED)。name
属性とhttp-equiv
属性の両方を提供するのはエラーです。content
属性は必須です(REQUIRED)。seeAlso
プロパティーは、唯一の定義済みのmeta用プロパティー名です。これは、コンテンツに関する付加的なメタデータ情報を提供する資源を指定するために用いられます。このプロパティーは、RDF(Resource Description Framework)スキーマ仕様1.0[RDF-SCHEMA 5.4.1項]のseeAlso
プロパティーでモデル化されています。http-equiv
属性は、HTTPでドキュメントを検索する場合に特に重要となります。推奨されるHTTPヘッダ情報の提供方法は、HTTPヘッダ・フィールドを用いるというものですが、SSMLドキュメントの作成者が、HTTPヘッダ・フィールドの設定により元サーバにあるドキュメントに関連付けることができないような場合には(例えば、キャッシュ制御情報)、「http-equiv」のcontentを使用できます(MAY)。HTTPサーバとキャッシュがSSMLドキュメントのmetaの内容を検査する必要はなく、したがって、それ以外の場合にHTTPサーバとキャッシュが送信するヘッダの値を無効にすることに注意してください。
参考情報: 次の例は、SSMLドキュメントにmeta要素を記述することで、付加的なメタデータ情報を提供する資源を指定しつつ、ドキュメントのキャッシュが禁止されていることを示す方法の例です。
<?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US"> <meta name="seeAlso" content="http://example.com/my-ssml-metadata.xml"/> <meta http-equiv="Cache-Control" content="no-cache"/> </speak>
meta要素は空要素です。
metadata要素は、メタデータ・スキーマを用いてドキュメントに関する情報を置くことができるコンテナです。metadataは、どのメタデータ・スキーマとも一緒に使用できますが、RDFのXMLシンタックス[RDF-XMLSYNTAX]を、Dublin Core Metadata Initiative[DC]が定義している汎用的なメタデータ・プロパティーと併せて使用することを推奨します(RECOMMENDED)。
RDF[RDF]は、宣言型言語であり、ウェブ上の事物のプロパティーと関係について、ステートメントの形でメタデータを表すためにXMLを用いる標準的な方法を提供します。コンテンツの作成者は、ドキュメントで使用するメタデータRDFスキーマを決定する際に、W3Cのメタデータの勧告である[RDF-XMLSYNTAX]と[RDF-SCHEMA]を参照すべきです。コンテンツの作成者は、Dublin Core Metadata Initiative[DC]も参照すべきです。これは、一般に適用できるコア・メタデータ・プロパティーの集合(例えば、Title(タイトル)、Creator(作成者)、Subject(主題)、Description(内容記述)、Rights(権利関係)など)です。
metadata要素で宣言したドキュメントのプロパティーは、あらゆるメタデータ・スキーマを使用できます。
参考情報: 次の例は、タイトル、内容記述、日付などの一般的なドキュメント情報を記述するダブリン・コア・バージョン1.0 RDFスキーマ[DC]を用いて、SSMLドキュメントにmetadataを記述する方法の例です。
<?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US"> <metadata> <rdf:RDF xmlns:rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs = "http://www.w3.org/2000/01/rdf-schema#" xmlns:dc = "http://purl.org/dc/elements/1.1/"> <!-- Metadata about the synthesis document --> <rdf:Description rdf:about="http://www.example.com/meta.ssml" dc:title="Hamlet-like Soliloquy" dc:description="Aldine's Soliloquy in the style of Hamlet" dc:publisher="W3C" dc:language="en-US" dc:date="2002-11-29" dc:rights="Copyright 2002 Aldine Turnbet" dc:format="application/ssml+xml" > <dc:creator> <rdf:Seq ID="CreatorsAlphabeticalBySurname"> <rdf:li>William Shakespeare</rdf:li> <rdf:li>Aldine Turnbet</rdf:li> </rdf:Seq> </dc:creator> </rdf:Description> </rdf:RDF> </metadata> </speak>
合成プロセッサはコンテンツを全く表示しないものの、metadata要素には任意のコンテンツを記述できます。
xml:lang
、xml:id
およびonlangfailure
は、p要素とs要素の定義済み属性です。
<?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US"> <p> <s>This is the first sentence of the paragraph.</s> <s>Here's another sentence.</s> </p> </speak>
p要素とs要素の使用は任意(OPTIONAL)です。テキストがp要素やs要素で囲み込まずに記述されている場合には、合成プロセッサは、プレーン・テキストのフォーマットに関する言語固有の知識を用いて、構造を決定しようと試みるべきです(SHOULD)。
p要素には、表示用テキストとaudio、break、emphasis、lang、lookup、mark、phoneme、prosody、say-as、sub、s、token, voice、wの要素のみを含むことができます。
s要素には、表示用テキストとaudio、break、emphasis、lang、lookup、mark、phoneme、prosody、say-as、sub、token、voice、wの要素のみを含むことができます。
token要素により、作成者はコンテンツがトークンであることを示し、合成プロセッサのトークン(単語)の区切りの曖昧さを取り除くことができます。
token要素は、次の言語を表現するために必要です。
この要素を使用すると、韻律を制御するためのキュー(例えば、休止)が改善される場合があり、合成プロセッサが同形異義語を正確に発音できるようになる可能性があります。break、mark、prosodyなどのその他の要素は、token内に記述でき、これによって、下位トークンのレベルでのアノテーション(例えば、音節、モーラや対象言語において適切なあらゆる単位)が可能となります。合成プロセッサは、このアノテーションを解析しなければならず(REQUIRED)、可能な場合にはこのアノテーションを表示してもよいです(MAY)。
トークン要素とその下位要素のテキストは、ともに、辞書の検索を目的とした次のようなトークンの1つであると考えられます。
したがって、「<token><emphasis>hap</emphasis>py</token>」と「<token><emphasis> hap </emphasis> py</token>」は、それぞれ「happy」と「hap py」というトークンになります。これが、token要素の外側にあるテキストやマークアップの処理方法とは異なることに注意してください(1.2項の「テキストの正規化」を参照)。
token要素の使用は任意です(OPTIONAL)。テキストがtoken要素で囲み込まずに記述されている場合には、合成プロセッサは、プレーン・テキストのフォーマットに関する言語固有の知識を用いて、トークンの区切りを決定しようと試みるべきです(SHOULD)。
xml:lang
は、コンテンツの記述言語を識別するためのtoken要素の定義済み属性です。
onlangfailure
は、言語の読み上げに失敗したときの望ましい挙動を指定する任意の(OPTIONAL)属性です。
role
属性は、token要素の任意の(OPTIONAL)定義済み属性です。role
属性は、複数のスペースで区切られたQNameを値としてとります(XML(使用するXMLのバージョンに応じて、1.0[XMLNS 1.0]または1.1[XMLNS 1.1])の名前空間の4項で定義されているとおり)。属性コンテンツ内のQNameは、それを含んでいるtoken要素が範囲としている名前空間宣言を用いることで、拡張名に拡張されます。したがって、QNameはそれぞれ、指定した名前空間内の特定の項目への参照を提供します。下記の2番目の例では、role
属性内のQNameを拡張すると、「http://www.example.com/claws7tags」という名前空間内の「VV0」という項目になります。このメカニズムにより、単語クラスの定義済み分類を、指定した名前空間URIで記述されているという想定で、参照できるようになります。
role
属性は、例えば、外部辞書内に記述されているテキストに対し、最も適切な発音の選択に役立つ追加情報を記述するなど、他の仕様との同期に役に立つことを目指しています(辞書ドキュメントを参照)。
token要素には、表示用テキストとaudio、break、emphasis、mark、phoneme、prosody、say-as、subの要素のみを含むことができます。
token要素には、audio、emphasis、lang、lookup、prosody、speak、p、s、voiceの要素のみを含むことができます。
下記は、token要素の使用例を示しています。
<?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="zh-CN"> <!-- The Nanjing Changjiang River Bridge --> <token>南京市</token><token>长江大桥</token> <!-- The mayor of Nanjing city, Jiang Daqiao --> 南京市长<w>江大桥</w> <!-- Shanghai is a metropolis --> 上海是个<w>大都会</w> <!-- Most Shanghainese will say something like that --> 上海人<w>大都</w>会那么说 </speak>
下記は、role
属性の使用例を示しています。下記の最初のドキュメントは、中国語の「处」という単語に対する辞書(PLS)の例です。2番目の例は、この辞書を参照して中国語の「处」という単語の適切な発音を選択するために、role属性を使用する方法を示しています。
<?xml version="1.0" encoding="UTF-8"?> <lexicon version="1.0" xmlns="http://www.w3.org/2005/01/pronunciation-lexicon" xmlns:claws="http://www.example.com/claws7tags" alphabet="x-myorganization-pinyin" xml:lang="zh-CN"> <lexeme role="claws:VV0"> <!-- base form of lexical verb --> <grapheme>处</grapheme> <phoneme>chu3</phoneme> <!-- pinyin string is: "chǔ" in 处罚 处置 --> </lexeme> <lexeme role="claws:NN"> <!-- common noun, neutral for number --> <grapheme>处</grapheme> <phoneme>chu4</phoneme> <!-- pinyin string is: "chù" in 处所 妙处 --> </lexeme> </lexicon>
<?xml version="1.0" encoding="UTF-8"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xmlns:claws="http://www.example.com/claws7tags" xml:lang="zh-CN"> <lexicon uri="http://www.example.com/lexicon.pls" type="application/pls+xml" xml:id="mylex"/> <lookup ref="mylex"> 他这个人很不好相<w role="claws:VV0">处</w>。 此<w role="claws:NN">处</w>不准照相。 </lookup> </speak>
say-as要素により、著者が、要素内に記述されているテキスト構成子の種類に関する情報を示すことが可能になり、記述されているテキスト表示の詳細さのレベルを指定するのに役立ちます。
テキスト・フォーマットの種類に関する包括的な定義は、検討しなければならない言語が多様であり、記述言語が本質的に柔軟であるため、困難です。SSMLでは、say-as要素とその属性、その目的のみを定めています。SSMLでは、属性となりえる値を挙げていません。ワーキンググループでは、これらの標準的な値や、関連する規範的な挙動を定義したドキュメントを別途作成する予定です。ここの例は、要素や属性の目的を説明するためだけに示しています。
say-as要素には、interpret-as
、format
、detail
の3つの属性があります。interpret-as
属性は、常に必須で(REQUIRED)、他の2つの属性は任意です(OPTIONAL)。format
属性の正当な値は、interpret-as
属性の値に依存します。
say-as要素には、表示用テキストのみを含むことができます。
interpret-as
属性とformat
属性interpret-as
属性は、記述されているテキスト構成子のコンテンツの種類を示します。コンテンツの種類の指定は、意図されている情報の種類によって表示方法が異なる可能性のあるテキストの構成子を合成プロセッサが識別し解釈するのに役立ちます。さらに、任意の(OPTIONAL)format
属性は、曖昧なフォーマットでありえるコンテンツの種類に関し、記述されているテキストの正確なフォーマットに関するヒントを与えてくれます。
interpret-as
とformat
の値が指定されているときには、合成プロセッサは、これらを、テキストの正規化と発音を支援するためにマークアップ・ドキュメントの作成者が提供するヒントと解釈します。
いかなる場合でも、say-as要素で囲み込まれているテキストは、現行本文中の言語の標準的で正しいつづりの形式であることを意図して作られています。合成プロセッサは、サポートするすべてのコンテンツの種類に対し、指定された言語の共通の正しいつづりの形式をサポートできるべきです(SHOULD)。
interpret-as
属性の値がプロセッサにとって不明またはサポートされていないときには、記述されているテキストは、interpret-as
の値が指定されていないかのように表示されなければなりません(MUST)。
format
属性の値がプロセッサにとって不明またはサポートされていないときには、記述されているテキストは、format
の値が指定されていないかのように表示されなければならず(MUST)、指定されているinterpret-as
の値を用いて表示されるべきです(SHOULD)。
指示されているformat
やinterpret-as
といった種類のコンテンツとは別にsay-as要素のコンテンツに付加的なテキストが含まれているときには、そのテキストが表示されなければなりません(MUST)。プロセッサは、付加的なテキストを、それが出現する要素のinterpret-as
の種類に応じて表示できます(MAY)。
指示されているinterpret-as
やformat
といった種類のコンテンツがsay-as要素のコンテンツに含まれていないときには、プロセッサは、format
属性かinterpret-as
属性のいずれかが存在していないのかのように、またはformat
とinterpret-as
の属性のどちらもが存在していないかのようにコンテンツを表示しなければなりません(MUST)。プロセッサは、不一致の状況についても通知すべきです(SHOULD)。
コンテンツの種類やフォーマットの指示は、情報の発音方法には必ずしも影響しません。合成プロセッサは、記述されているテキストを、そのコンテンツがその言語で通常発音されている方法で発音すべきです(SHOULD)。
detail
属性detail
属性は、読み上げまたは表示の詳細さのレベルを示す任意の(OPTIONAL)属性です。detail
属性のすべての値は、記述されているテキスト内にある情報コンテンツをすべて表示しなければなりません(MUST)。しかし、detail
属性の特定の値は、通常はテキスト本文において情報コンテンツではないけれども、特定の目的で表示するのが重要でありえるコンテンツを表示するために使用できます。例えば、合成プロセッサは、通常は、韻律を適切に変更して記号類を表現するでしょう。例えば、コード化された部品番号やソフトウェア・コードを読み上げる場合に、より高い詳細レベルの設定を用いて、記号類を明確に読み上げることができます。
detail
属性は、すべての種類のinterpret-as
に使用できます。
detail
属性が指定されていない場合は、合成プロセッサが作成する詳細さのレベルはテキストのコンテンツとその言語に依存します。
detail
属性の値がプロセッサにとって不明またはサポートされていないときには、記述されているテキストは、detail
属性の値が指定されていないかのように表示されなければなりません(MUST)。
phoneme要素は、記述されているテキストに音素/音声上の発音を付与します。phoneme要素は、空でもよいです(MAY)。しかし、読み上げないドキュメント表現に使用できる、人間が読むことができるテキストを要素に含むことを推奨します(RECOMMENDED)。例えば、聴覚障害があるユーザのために、コンテンツを視覚的に表示できるかもしれません。
ph
属性は、音素/音声の文字列を指定する必須の(REQUIRED)属性です。
この要素は、音素および音声の表記専用に設計されており、単語や非常に短い語句に発音を付与するために用いることを目的としています。音素/音声の文字列は、テキストの正規化が行われず、辞書(3.1.5項を参照)を調べるためのトークンとして扱われることもありませんが、say-asとsub内の値は、これらをの両方を行うことができます。簡潔に言えば、音素の列は、言語において言語学上の大きな違いが顕著な、言語に依存した音声単位である音素で構成されます。大まかに言えば、音素は、ある言語において、ある単語と別の単語を区別するために必要なすべての音を表します。他方で、音声の列は、方法(息を吐き出す、舌打ちをする、発声するなど)および人間の声道内の発音の場所(前、中間、後ろなど)を特徴とする音の単位である音声で構成され、したがって、言語に依存しません。音声とは、人間が言語を産出する際に具現化される特質を表します。
alphabet
属性は、音素/音声の発音文字を指定する任意の(OPTIONAL)属性です。この場合の発音文字とは、複数の人間の言葉の発音を表すための記号の集合を意味します。この属性に有効な値は、発音文字レジストリ(Pronunciation Alphabet Registry)で定義されている値である「ipa」(次の段落を参照)および「x-organization」や「x-organization-alphabet」の形式のベンダー固有の文字列のみです。例えば、電子情報技術産業協会[JEITA]は、自身の音素文字[JEIDAALPHABET]に対し「x-JEITA」や「x-JEITA-IT-4002」のような文字の使用を促進したいと思うかもしれません。
合成プロセッサは、「ipa」(国際音声学会[IPA]が開発したUnicodeによる音声文字の表現)のalphabet
の値をサポートすべきです(SHOULD)。この文字集合は、母音と子音の包括的な記号に加えて、音節区切り記号、多数の発音区別記号、強調記号、語彙声調記号、イントネーション標識などをサポートしています。この文字では、正当なph
の値は[IPAHNDBK]の付録2で指定されている値の文字列です。IPA転写では、読みやすさのためにスペース(発音には影響しない)を記述できることに注意してください。IPAからUnicodeへのマッピングの参考情報の表は、[IPAUNICODE1]と[IPAUNICODE2]にあります。すべてのIPA文字がUnicodeで利用できるとは限らないことに注意してください。この文字をサポートしているプロセッサの場合、
ph
の値をすべて受け入れなければならない(MUST)。<?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US"> <phoneme alphabet="ipa" ph="təmei̥ɾou̥"> tomato </phoneme> <!-- This is an example of IPA using character entities --> <!-- Because many platform/browser/text editor combinations do not correctly cut and paste Unicode text, this example uses the entity escape versions of the IPA characters. Normally, one would directly use the UTF-8 representation of these symbols: "təmei̥ɾou̥". --> </speak>
alphabet
の値が、合成プロセッサにとって不明または適用できないと規定されている場合はエラーです。alphabet
属性が規定されていないままである場合のデフォルトの挙動は、プロセッサによって異なります。
type
属性は、発音情報の解釈方法に関する付加的な情報を示す任意の属性です。この属性に認められていない値は、含意を持たない「default」と、ルビのテキスト[RUBY]から発音情報を得られることを示す「ruby」のみです。この属性のデフォルト値は「default」です。
phoneme要素自身には、テキストのみを含むことができます(要素は不可)。
発音文字レジストリ(Pronunciation Alphabet Registry)へのリンクは、http://www.w3.org/2001/10/synthesisのSSML名前空間のページにあります。
sub要素は、alias
属性の値のテキストが、記述されている発音用のテキストに置き換えられることを示すために用います。これにより、ドキュメントに記述形式と会話形式の両方を含むことが可能になります。必須の(REQUIRED)alias
属性では、囲み込んだ文字列の代わりに、読み上げ用の文字列を指定します。プロセッサは、alias
の値にテキスト正規化を適用すべきです(SHOULD)。
sub要素には、テキストのみを含むことができます(要素は不可)。
<?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US"> <sub alias="World Wide Web Consortium">W3C</sub> <!-- World Wide Web Consortium --> </speak>
lang要素は、コンテンツの自然言語を指定するために用います。
xml:lang
は、ルート・ドキュメントの言語を指定する必須の(REQUIRED)属性です。
onlangfailure
は、言語の読み上げに失敗したときの望ましい挙動を定める任意の(OPTIONAL)属性です。
この要素は、自然言語に変更がある場合に使用できます(MAY)。テキストの構造は、lang要素で示される言語の変更とは関係ありません。段落、文、単語以外のレベルのコンテンツの言語を定めるために使用できます(MAY)。言語の変更が、テキストの構造と関連している場合には、p、s、tokenまたはwの各要素にxml:lang
属性を用いることを推奨します(RECOMMENDED)。
<?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US"> The French word for cat is <w xml:lang="fr">chat</w>. He prefers to eat pasta that is <lang xml:lang="it">al dente</lang>. </speak>
lang要素には、表示用テキストとaudio、break、emphasis、lang、lookup、mark、p、phoneme、prosody、say-as、sub、s、token、voice、wの要素のみを含むことができます。
onlangfailure
属性onlangfailure
属性は、言語の読み上げに失敗したときの合成プロセッサの望ましい挙動を列挙した次のリストのうちの1つの値を含んでいる任意の(OPTIONAL)属性です。適合合成プロセッサは、下記の処理の実行に加えて、言語の読み上げに失敗したことを報告しなければなりません(MUST)。
現在選択されている音声(3.2.1項を参照)では宣言されているテキストの言語を読み上げることができないと合成プロセッサが判断した場合には、常に言語の読み上げに失敗します。合成プロセッサが、新しいxml:lang
の値や、どのように音声を処理するか分からないような文字や文字列に遭遇した場合には、これが起こりえます。
この属性の値は、ドキュメントの下位階層にまで継承されます。つまり、ドキュメント全体の望ましい挙動が同じであれば、値は一度だけ付与すれば良いです。また、この値の設定は入れ子に記述されます。つまり、内側の属性の記述が外側の属性に優先します。この属性の最上位のデフォルト値は「processorchoice」です。SSMLの断片を組み込んでいる他の言語(speak要素なしに)は、この属性に対する最上位のデフォルト値を宣言しなければなりません(MUST)。
onlangfailure
は、xml:lang
を記述できるすべての要素に記述できます。したがって、これは、speak、lang、desc、p, s、token、wの要素の定義済み属性です。
voice(音声)要素は、読み上げ音声の変更を要求する生成要素です。音声要素の属性には、望ましい音声の機能を示すものと、その挙動を制御するものの2種類があります。音声機能の属性は次のとおりです。
gender
(性別): 記述されているテキストを読み上げる音声の望ましい性別を示す任意の(OPTIONAL)属性。列挙される値は、「男性」、「女性」、「中性」、または空の文字列「」。
age
(年齢): 記述されているテキストを読み上げる音声の望ましい(誕生以来の)年齢を示す任意の(OPTIONAL)属性。認められている値は、xsd:nonNegativeInteger[SCHEMA2 3.3.20項]の形式または空の文字列「」。
variant
(異種): 記述されているテキストを読み上げる音声特性の望ましいその他の選択肢を示す任意の(OPTIONAL)属性(例えば、2番目の男の子の声)。variant
の有効な値は、xsd:positiveInteger[SCHEMA2 3.3.25項]の形式または空の文字列「」。
name
(名前): 記述されているテキストを読み上げるプロセッサ固有の音声の名前を示す任意の(OPTIONAL)属性。値は、名前を優先度の最も高いものから順に並べたスペースで区切られたリストまたは空の文字列「」でありえる(MAY)。そのため、名前にはスペースを含んではならない(MUST NOT)。
languages
(言語): 音声で読み上げることが望ましい言語のリストを示す任意の(OPTIONAL)属性。値は、空の文字列「」またはスペースで区切られた言語のリストのいずれかで、言語ごとに任意の(OPTIONAL)アクセント指示が付きます。言語/アクセントのペアはそれぞれ、「language」か「language:accent」の形式で、languageとaccentは両方とも、拡張言語範囲(Extended Language Range)[BCP47, Matching of Language Tags 2.2項]でなければなりません(MUST)。ただし、「und」と「zxx」は認められていません。リストの言語/アクセントのペアがそれぞれ下記のとおりである場合に、音声はlanguages
機能を満たしています。
例えば、「en:pt fr:ja」というlanguages
の値は、英語(ポルトガルのアクセントで話す)とフランス語(日本のアクセントで話す)の両方を読み上げることができる音声と正当に適合します。したがって、「pt-BR」というアクセント付きの「en-US」と、「ja」というアクセント付きの「fr-CA」のみをサポートする音声は適合するでしょう。別の例としては、<voice languages="fr:pt>と示されていながら、ポルトガルのアクセント付きのフランス語をサポートしている音声がない場合には、音声選択は失敗でしょう。言語にアクセントの指示が与えられていない場合には、アクセントに関係なく、その言語を読み上げるあらゆる音声が認められることに注意してください。また、作成者による音声選択中の言語サポートの制御に関しては、テキスト内のxml:lang
の値に依存しないことに注意してください。
上記の機能属性では、空の文字列の値は、あらゆる音声が機能を満たすことを示します。すべての機能属性に対する最上位のデフォルト値は「」(空の文字列)です。
voiceの挙動制御属性は、次のとおりです。
required
(必須): それぞれの属性名で機能を指定する任意の(OPTIONAL)属性。この機能は、下記で述べる音声選択アルゴリズムに使用される。required
の有効な値は、機能名のリストの値(「name」(名前)、「languages」(言語)、「gender」(性別)、「age」(年齢)、「variant」(異種)または空の文字列「」)から成るスペースで区切られたリスト。この属性のデフォルト値は「languages」(言語)。ordering
(順序): 機能の優先順序を指定する任意の(OPTIONAL)属性。ordering
の有効な値は、機能名のリストの値(「name」(名前)、「languages」(言語)、「gender」(性別)、「age」(年齢)、「variant」(異種)または文字列「」)から成るスペースで区切られたリストで、リストで以前に指定された機能の方が優先度が高い。この属性のデフォルト値は「languages」(言語)。ordering
のリストに挙げられていない機能は、互いに等しい優先度だが、リストの最後の機能よりも優先度が低い。ordering
属性が空の文字列に設定されている場合には、すべての機能が同じ優先度であることに注意が必要。onvoicefailure
: 音声の選択に失敗したときの合成プロセッサの望ましい挙動を列挙した次のリストのうち1つの値を含んでいる任意の(OPTIONAL)属性。この属性のデフォルト値は「priorityselect」。
次の音声選択アルゴリズムを用いなければなりません(MUST)。
required
属性値に挙げられているすべての音声機能属性の値と一致するすべての利用可能な音声が識別されます。required
属性の値が空の文字列「」であれば、すべての音声がうまく一致すると見なされます。複数の音声が識別されれば選択は成功と考えられます。そうでない場合には、音声の選択は失敗です。required
属性値に列挙されていないもの)を用いて、機能優先度にしたがって音声を選択します。その場合、最初の候補集合は、識別されたすべての音声の集合です。onvoicefailure
属性の値で表されている処理の実行に加えて、音声の選択に失敗したことを報告しなければなりません(MUST)。ordering
属性で管理しているとおりに、優先度が最も高い機能から順に取り込まれます。
ordering
のリストのすべての機能属性を検討した後に、候補集合に複数の音声が残る場合には、合成プロセッサは、それらのうちのどれか1つを使用しなければなりません(MUST)。各属性はそれぞれ任意ですが、voice要素が用いられているにも関わらず、属性が全く指定されていなければエラーです。
<?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US"> <voice gender="female" languages="en-US" required="languages gender variant">Mary had a little lamb,</voice> <!-- now request a different female child's voice --> <voice gender="female" variant="2"> Its fleece was white as snow. </voice> <!-- processor-specific voice selection --> <voice name="Mike" required="name">I want to be like Mike.</voice> </speak>
合成プロセッサで利用できるようになったすべての音声に関し、音声のベンダーは、下記のドキュメントを作成しなければなりません。
言語の表示(xml:lang
による)と音声の選択(voiceによる)は独立していますが、これら2つの値のあらゆる組み合わせを合成プロセッサがサポートするという要件はありません。しかし、合成プロセッサは、あらゆる組み合わせに予期される表示の挙動をドキュメント化しなければなりません(MUST)。音声で読み上げることができないテキストのコンテンツにプロセッサが遭遇したときに何が起こるかに関する情報については、onlangfailure
属性を参照してください。
voice属性は、言語を変更した要素内も含む、ツリーの下位にまで継承されます。各属性に記述されているデフォルトは、最上位(のドキュメント)レベルにのみ適用され、著者が明示的にvoice要素を使用したときに無効になります。さらに、音声の変更は、変更が生じた要素のコンテンツのみを範囲とし、それのみに適用されます。voice要素のコンテンツの最後(つまり、</voice>という終了タグ)にまで処理がたどりついた場合には、開始タグより前で有効であった音声は回復します。
同様に、言語の読み上げに失敗した結果としてプロセッサが音声を変更する場合、その音声が再びコンテンツを読み上げることができるときには、以前の音声は回復します。合成プロセッサは、ドキュメントの実行開始前にデフォルトの音声を選択するように求められるため、アクティブな音声が常に存在していることに注意してください(3.1.1項を参照)。
<?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US"> <voice gender="female" required="languages gender age" languages="en-US ja"> Any female voice here. <voice age="6"> A female child voice here. <lang xml:lang="ja"> <!-- Same female child voice rendering Japanese text. --> </lang> </voice> </voice> </speak>
韻律パラメータの相対的な変更は、音声の変更の全体に行きわたるべきです(SHOULD)。しかし、異なる音声は、異なる人を表すため、当然ながら、速度や読み上げのピッチなどの既定値は異なります。そのため、韻律のパラメータの絶対値は、音声の変更ごとに異なる可能性があります。
文中で音声の変更が求められれば、出力するオーディオや音声の質は影響を受けるかもしれません。
voice要素には、表示用テキストとaudio、break、emphasis、lang、lookup、mark、p、phoneme、prosody、say-as、sub、s、token、voice、wの要素のみを含むことができます。
emphasis要素は、記述されているテキストが強調(卓立や強勢とも呼ばれる)されて読み上げられることを求めます。強調の性質は、言語や方言、さらに声によっても異なるため、合成プロセッサは強調の表現方法を決定します。属性は次のとおりです。
level
(レベル): 適用する強調の強さを示す任意の(OPTIONAL)level
属性。定義されている値は「strong」(強い)、「moderate」(ほどほど)、「none」(なし)、「reduced」(弱い)。デフォルトのlevel
は「moderate」。「strong」と「moderate」の強調の意味は、読み上げられる言語(言語は、ピッチの変化、タイミングの変化、音の大きさ、その他の音響の変化を組み合わせて強調を表す)に基づいて解釈される。「reduced」というlevel
は、事実上、単語の強調の逆。例えば、「going to」というフレーズが弱くなると「gonna」と読み上げられるかもしれない。「none」というlevel
は、合成プロセッサが通常は強調する可能性がある単語が強調されるのを防止するために用いる。「none」、「moderate」、「strong」という値は、強さにおいて単調非減少。
<?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US"> That is a <emphasis> big </emphasis> car! That is a <emphasis level="strong"> huge </emphasis> bank account! </speak>
emphasis要素には、表示用テキストとaudio、break、emphasis、lang、lookup、mark、phoneme、prosody、say-as、sub、token、voice、wの要素のみを含むことができます。
break要素は、休止またはその他のトークン間の韻律の境界を制御する空要素です。対のトークンの間にbreak要素を使用するか否かは任意です(OPTIONAL)。トークン間にこの要素がない場合は、言語上の文脈に基づいて合成プロセッサが自動的に決定すると予想されます。実際に、break要素は、合成プロセッサの標準の自動的な挙動を無効にするために最もよく用いられます。この要素の属性は次のとおりです。
strength
(強さ): strength
属性は、"none"(なし)、"x-weak"(とても弱い)、"weak"(弱い)、"medium"(中間)(デフォルト値)、 "strong"(強い)、"x-strong"(とても強い)の値のうちの1つを有する任意の(OPTIONAL)属性。この属性は、音声出力における韻律の休止の強さを示すために用いる。「なし」という値は、韻律の休止の境界が出力されるべきでないことを示し、これがなければプロセッサが韻律の休止を作り出してしまうのを防ぐために使用できる。その他の値は、単調非減少(概念的に増加)のトークン間の休止の強さを示す。強い境界には通常、休止が伴う。「x-weak」と「x-strong」は、それぞれ「extra weak」と「extra strong」の簡略形。
time
(時間): time
属性は、出力に挿入される休止の時間長を秒またはミリ秒で示す任意の(OPTIONAL)属性。これは、例えば、「250ms」、「3s」など、CSS2( Cascading Style Sheets Level 2)勧告[CSS2]の時間の値のフォーマットに従う。
strength
属性は、休止の韻律の強さを示すために用います。例えば、通常、段落間の休止は、文中の単語間の休止よりかなり強いです。合成プロセッサは、韻律の休止の実装の一部としてポーズを挿入できます(MAY)。time
属性を用いて、特定の長さのポーズを挿入することもできます。
break要素が、strength
属性ともtime
属性とも一緒に用いられていなければ、プロセッサは、break要素が提供されてないときにプロセッサが用いたと思われる韻律より強い韻律の休止を作り出すでしょう。
strength
属性とtime
属性の両方が提供されている場合には、プロセッサは、time
属性で指定されている時間長の休止を、strength
属性の値に基づいて出力の韻律を変化させて挿入するでしょう。
<?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US"> Take a deep breath <break/> then continue. Press 1 or wait for the tone. <break time="3s"/> I didn't hear you! <break strength="weak"/> Please repeat. </speak>
prosody要素により、音声出力のピッチ、読み上げ速度、音量の制御が可能となります。属性(すべて任意(OPTIONAL))は次のとおりです。
pitch
(ピッチ): 記述されているテキストのベースライン・ピッチ。「ベースライン・ピッチ」の正確な意味は合成プロセッサによって異なるが、この値の増加/減少により通常、出力のおおよそのピッチが増加/減少する。正当な値は、「Hz」が後続する数値、相対変化、「x-low」(とても低い)、「low」(低い)、「medium」(中間)、「high」(高い)、「x-high」(とても高い)または「default」(デフォルト)。「x-low」から「x-high」までのラベルは、一連の単調非減少のピッチ・レベルを表す。
contour
(曲線): 記述されているテキストの実際のピッチ曲線を設定。フォーマットは、下記のピッチ曲線で定められている。
range
(レンジ): 記述されているテキストのピッチ・レンジ(可変性)。「ピッチ・レンジ」の正確な意味は合成プロセッサによって異なるが、この値の増加/減少により通常、出力ピッチのダイナミック・レンジは増加/減少する。正当な値は、「Hz」が後続する数値、相対変化、「x-low」(とても低い)、「low」(低い)、「medium」(中間)、「high」(高い)、「x-high」(とても高い)または「default」(デフォルト)。「x-low」から「x-high」までのラベルは、一連の単調非減少のピッチ・レンジを表す。
rate
(速度): 記述されているテキストの読み上げ速度の変更。正当な値は、負でないパーセンテージ、「x-slow」(とても遅い)、「slow」(遅い)、「medium」(中間)、「fast」(早い)、「x-fast」(とても速い)または「default」(デフォルト)。「x-slow」から「x-fast」までのラベルは、一連の単調非減少の読み上げ速度を表す。値が負でないパーセンテージのとき、デフォルトの速度の乗数の機能を果たす。例えば、100%という値は、読み上げ速度が変わらないことを意味する。200%という値は、デフォルトの速度の2倍の読み上げ速度を意味する。また、50%という値は、デフォルトの速度の半分の読み上げ速度を意味する。デフォルトの音声の速度は、言語や方言、そして、音声の個性によって異なる。デフォルトの音声の速度は、テキストを声に出して読み上げたときに、通常の音声の読み上げ速度と感じることができるようなものであるべき(SHOULD)。音声はプロセッサに依存するため、デフォルトの速度も同様。
duration
(時間長): 記述されているテキストの望ましい読み上げの所要時間で、秒またはミリ秒による値。例えば、「250ms」、「3s」など、CSS2勧告[CSS2]の時間の値のフォーマットに従う。
volume
(音量): 記述されているテキストに対する音量。正当な値は、前に「+」か「-」が、直後に「dB」が付いた数値、「silent」(無音)、「x-soft」(とても小さい)、「soft」(小さい)、「medium」(中間)、「loud」(大きい)、「x-loud」(とても大きい)または「default」(デフォルト)。デフォルトは+0.0dB。silentという値を指定することは、マイナス無限デシベル(dB)を指定することを意味する。「silent」から「x-loud」までのラベルは、一連の単調非減少の音量レベルを表す。値が符号付き数値(dB)である場合、それは新しい信号の振幅(a1)と現在の振幅(a0)の2乗の比率を示しており、dBで定義される。
volume
(dB) = 20 log10 (a1 / a0)
数値による音量レベル(dBでの)は、すべて現在のレベルと関連があり、常に符号付き(0も含む)であることに注意してください。さらに、現在の音量レベルを「silent」に設定すれば、相対変化により、子もすべて無音になります。子のprosody要素は、「default」のラベルを用いて、現在の音量レベルをリセットできます(MAY)。
そのため、下記の各値は次のようになります。
ラベルの値に対するこの属性の挙動が、数値に対する挙動と異なる可能性があることに注意してください。数値を用いると、直接的な波形の変化が生じますが、ラベルの値を用いると、例えば、音声単位ごとに振動数や声量を変えて調節するなど、人間が声量を増減させる方法をより正確に反映した韻律の変化が起こる可能性があります。
各属性はそれぞれ任意ですが、prosody要素が用いられているにも関わらず、属性が全く指定されていなければエラーです。「x-foo」という属性値名は、「extra foo」の簡略形であることを意味します。すべての単位(「Hz」、「st」)は、大文字・小文字を区別します。通常のピッチ・レベルと標準のピッチ・レンジは、ピッチの対象や範囲でラベル付き値の意味が変わるのと同じように、言語によって著しく変わるかもしれないことにも注意してください。
下記にvolume
属性の使用方法の例を挙げます。
<speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US"> <s>I am speaking this at the default volume for this voice.</s> <s><prosody volume="+6dB"> I am speaking this at approximately twice the original signal amplitude. </prosody></s> <s><prosody volume="-6dB"> I am speaking this at approximately half the original signal amplitude. </prosody></s> </speak>
数値は、指数のないシンプルな正の浮動小数点の値です。正当な形式は、「n」が1つ以上の数字である「n」、「n.」、「.n」、「n.n」です。
負でないパーセンテージは、「%」が直後に付いた符号のない数値です。
上記の属性に対する相対変化を、次の通りに指定できます。
<?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US"> The price of XYZ is <prosody rate="90%">$45</prosody> </speak>
ピッチ曲線は、音声出力の特定の時間位置における、スペースで区切られた1組のターゲットと定義されています。ターゲット間への挿入のアルゴリズムは、プロセッサによって異なります。対の形式(time position,target)
の最初の値は、記述されているテキストの時間の割合(後に「%」が付いた数値)で、2番目の値は、pitch
属性の値(後に「Hz」が付いた数値、相対変化またはラベルの値)です。0%から100%の範囲以外の時間位置の値は無視されます。ピッチの値が0%または100%で定義されていない場合には、最も近いピッチ・ターゲットが複製されます。ピッチの相対値はすべて、記述されているテキストの直前のピッチの値と相対的です。
<?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US"> <prosody contour="(0%,+20Hz) (10%,+30%) (40%,+10Hz)"> good morning </prosody> </speak>
duration
属性は、rate
属性に優先します。contour
属性は、pitch
属性とrange
属性に優先します。
すべての韻律属性のデフォルト値に変化はありません。例えば、rate
属性の省略は、要素内の速度は要素外と同じであることを意味します。
prosody要素には、表示用テキストとaudio、break、emphasis、lang、lookup、mark、p、phoneme、prosody、say-as、sub、s、token、voice、wの要素のみを含むことができます。
韻律属性の値はすべて指示できます。指定されているとおりに合成プロセッサが正確にドキュメントを表現できない場合(例えば、ピッチを1MHzに設定しようとしたり、読み上げ速度を1,000,000語/分に設定しようとするなど)には、指定されているけれどもサポートされていない値に、限界や代替値を設定することにより処理し続けようと最大限の努力をしなければならず(MUST)、このように限界を超えた場合にはホスト環境に通知できます(MAY)。
例えば、指示されている値が冗長、不適当またはエラーであるとプロセッサが判断したときなど、場合によって、合成プロセッサは、特定の韻律のマークアップを無視することを選択できます(MAY)。特に、大きな聴覚単位を採用している連結型の合成音声システムは、与えられた聴覚単位の韻律が冗長であれば、韻律変更のマークアップ要素を拒否でき(MAY)、そうしなければ、読み上げの品質が低下するでしょう。
audio要素は、録音済みオーディオ・ファイル(必須の(REQUIRED)フォーマットに関しては付録Aを参照)の組み込み音声および合成音声の出力を伴うその他のオーディオ・フォーマットの組み込みをサポートします。audio要素は空でもよいです(MAY)。audio要素が空でない場合、その内容は、オーディオ・ドキュメントが利用できない場合に読み上げられるマークアップされたテキストであるべきです。代替コンテンツには、テキスト、読み上げ用マークアップ、desc要素やその他のaudio要素がありえます(MAY)。代替コンテンツは、ドキュメントを非可聴出力として表現する場合やアクセシビリティ(desc要素を参照)のためにも使用できます(MAY)。下記の小項目で述べている任意の(OPTIONAL)属性に加え、audioには次の属性があります。
名前 | 必須 | タイプ | デフォルト値 | 説明 |
---|---|---|---|---|
src |
false | URI | なし | 適切なメディア・タイプが付与されたドキュメントのURI。記述されていなければ、audio要素は、正当なURIが付与されたsrcが存在するかのように動作するものの、ドキュメントを得ることはできない。 |
fetchtimeout |
false | 時間指定 | プロセッサ固有 | 取得のタイムアウト。 |
fetchhint |
false | 「prefetch」(事前取得)という値か「safe」(安全)という値 | prefetch | これは、事前に取得したオーディオによって表現の最適化を試みることができるか否かを合成プロセッサに伝える。値は、オーディオを事前に取得せずに、必要なときにのみ取得できるsafe(安全)、または、プロセッサが事前にオーディオを取得することできる(しかし必須ではない)prefetch(事前取得)のどちらか。 |
maxage |
false | xsd:nonNegativeInteger | なし | 指定された有効期限を超えないコンテンツをドキュメントで使用する意思があることを示す(HTTP 1.1[RFC2616]の「max-age」を参照)。maxstale が一緒に記述されていなければ、ドキュメントは期限を超えたコンテンツを使用しようとしない。 |
maxstale |
false | xsd:nonNegativeInteger | なし | 有効期限を超えたコンテンツをドキュメントで使用する意思があることを示す(HTTP 1.1[RFC2616]の「max-stale」を参照)。maxstale に値が割り当てられている場合、ドキュメントは指定された時間だけ有効期限を超えたコンテンツを受け入れようとする。 |
<?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US"> <!-- Empty element --> Please say your name after the tone. <audio src="beep.wav"/> <!-- Container element with alternative text --> <audio src="prompt.au">What city do you want to fly from?</audio> <audio src="welcome.wav"> <emphasis>Welcome</emphasis> to the Voice Portal. </audio> </speak>
audio要素は、下記によってうまく再生できます。
オーディオ・ソースの再生を試みるときに、メディア・タイプの不一致やヘッダ情報の間違いなどの、多くの様々な問題が生じるかもしれません。一般的に、合成プロセッサは、参照されているメディアの再生に最大の努力を行い、失敗した場合には、代替コンテンツを再生しなければなりません(MUST)。プロセッサは、参照されているメディアのすべてあるいは部分と、参照されている代替コンテンツのメディアのすべてあるいは部分の両方を再生してはならない(MUST NOT)ことに注意してください。参照されているメディアのいずれかが処理され再生されれば、その再生はこの項の文脈において成功したと考えられます。参照されているメディアの代わりに代替コンテンツが再生されるエラーが生じれば、プロセッサは、そのようなエラーが生じたとホスティング環境に通知しなければなりません(MUST)。プロセッサは、直ちに非同期イベントでホスティング環境に通知できます(MAY)。または、プロセッサは、リクエストの再生完了をホスティング環境に伝える場合には、再生の終了時のみにホスティング環境に通知できます(MAY)。また、プロセッサは、そのログ記録システムを用いてエラーを通知することもできます(MAY)。可能であれば、プロセッサは、エラーに関する情報を含むべきです(SHOULD)。例えば、http 404エラーによりメディア資源を取得できなかった場合には、そのエラー・コードを通知に含むことができるかもしれません。
audio要素には、表示用テキストとaudio、break、desc、emphasis、lang、lookup、mark、p、phoneme、prosody、say-as、sub、s、token、voice、wの要素のみを含むことができます。
トリミング属性は、オーディオの再生範囲を定義します。オーディオ・コンテンツ内の範囲の開始と終了は、ともに時間オフセットを用いて指定できます。繰り返しを含む、その範囲の時間長を、繰り返し属性で指定することもできます。これらの属性に対する合成プロセッサのサポートは、拡張プロファイルにおいて必須となっています(REQUIRED)。
audioに対し、次のトリミング属性が定義されています。
名前 | 必須 | タイプ | デフォルト値 | 説明 |
---|---|---|---|---|
clipBegin |
false | 時間指定 | 0s | 再生を開始するメディアの開始点からのオフセット。このオフセットは、メディアの開始からの通常のメディア再生時間で測定される。 |
clipEnd |
false | 時間指定 | なし | 再生を終了するメディアの開始点からのオフセット。このオフセットは、メディアの開始からの通常のメディア再生時間で測定される。 |
repeatCount |
false | 正の実数 | 1 | 再生すべきメディアの繰り返し回数。メディアの再生部分は小数値で記述する。 |
repeatDur |
false | 時間指定 | なし | メディアを繰り返して再生するトータルの時間長。この時間長は、メディアの開始からの通常のメディア再生時間で測定される。 |
下記の場合、再生時間長およびその他のタイミングのプロパティーとの相互作用の計算は、SMILのアクティブな時間長の計算に従います。
clipBegin
、clipEnd
、repeatDur
の時間指定の値が、SMIL Clock-valueの部分集合である。repeatCount
は効果がない。clipEnd
がオーディオの終了後にある場合、オーディオの最後で再生が終了する。clipBegin
がclipEnd
の後にある場合、オーディオは作成されない。repeatDur
は、メディア再生のトータル時間の決定において、repeatCount
に優先する。
すべてのSMILタイミング機能がサポートされているとは限らないことに注意してください。
実数と整数は十進法のみで指定されます。
整数は「0」から「9」までの1つ以上の数字から成ります。
実数は、整数、または0個以上の数字の後に点(.)が付き、さらにその後に1つ以上の数字が付く形式でありえます。整数と実数の両方の前に、記号を示す1つの「-」か「+」を付けることができます。
時間指定は、時間単位識別子が後続する負でない実数から成ります。時間単位識別子は次のとおりです。
例: 「3s」、「850ms」、「0.7s」、「.5s」、「+1.5s」
次の例では、オーディオの10秒目からメディアの再生が開始されます。
<?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis-extended.xsd" xml:lang="en-US"> <audio src="radio.wav" clipBegin="10s" /> </speak>
次の場合、オーディオの20秒後にメディアの再生が終了します。
<?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis-extended.xsd" xml:lang="en-US"> <audio src="radio.wav" clipBegin="10s" clipEnd="20s" /> </speak>
「radio.wav」の時間長が20秒未満であれば、clipEnd
の値は無視され、再生の終了はメディアの事実上の最後と同じになることに注意してください。
次の例では、オーディオの時間長はrepeatCount
によって制約されています。
<?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis-extended.xsd" xml:lang="en-US"> <audio src="3second_sound.au" repeatCount="0.5" /> </speak>
クリップの前半のみが再生され、アクティブな時間長は1.5秒になるでしょう。
次の例では、オーディオは合計7秒間繰り返されるでしょう。2回完全に再生され、その後に2秒の断片部分が続きます。これはrepeatCount
を2.8にしたものと同じです。
<?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis-extended.xsd" xml:lang="en-US"> <audio src="2.5second_music.mp3" repeatDur="7s" /> </speak>次の例では、オーディオのアクティブな時間長は4秒になるでしょう。オーディオの1秒目から再生が開始され(
clipBegin
の値で指定されているとおり)、その後に1秒間再生され(clipEnd
が2秒と指定されているため)、その後に、トータルの時間長が4秒になるように(repeatDur
で指定されているとおり)、この範囲が繰り返されるでしょう。repeatDur
の値がrepeatCount
の値に優先することに注意してください。
<?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis-extended.xsd" xml:lang="en-US"> <audio src="2.5second_music.mp3" clipBegin="1s" clipEnd="2s" repeatCount="5" repeatDur="4s" /> </speak>
これらの属性は、speakのトリミング属性によって指定される表現との相互作用が可能です。
<speak version="1.1" startmark="mark1" endmark="mark2" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis-extended.xsd" xml:lang="en-US"> <audio src="first.wav"/> <mark name="mark1"/> <audio src="15second_music.mp3" clipBegin="2s" clipEnd="7s" /> <mark name="mark2"/> <audio src="last.wav"/> </speak>
speakのstartmark
とendmark
により、「15second_music.mp3」のクリップのみが再生可能となります。オーディオの実際の時間長は5秒です。クリップは、オーディオの2秒目から開始され7秒後に終了します。したがって、時間長は5秒です。
soundLevel
属性soundLevel
属性は、参照されているオーディオの相対的な音量を定めます。これは、SMIL[SMIL3]の同じ名前の属性がきっかけとなりました。この属性に対する合成プロセッサのサポートは、拡張プロファイルにおいて必須です(REQUIRED)。
名前 | 必須 | タイプ | デフォルト値 | 説明 |
---|---|---|---|---|
soundLevel |
false | 直後に「dB」が付く記号(「+」または「-」)付きCSS2数値 |
デフォルト値は+0.0dB。 | デシベル値は、soundLevel (dB) = 20 log10 (a1 ∕ a0)のように、新しい信号の振幅(a1)と現在の振幅(a0)の2乗の比率と解釈され、dBで定義される。大きな負の値を設定すると、メディアは事実上無音で再生される。「-6.0dB」という値では、現在の信号振幅の約半分の振幅でメディアが再生される。同様に、「+6.0dB」という値では、現在の信号振幅の約2倍の振幅でメディアが再生される(ハードウェア上の限界に依存する)。メディアの絶対的な知覚音響レベルは、さらにシステムの音量設定に依存しており、この属性では制御できない。 |
下記にsoundLevel
属性の使用方法の例を挙げます。
<speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis-extended.xsd" xml:lang="en-US"> <s>This is the original, unmodified waveform: <audio src="message.wav"/> </s> <s>This is the same audio at approximately twice the signal amplitude: <audio soundLevel="+6dB" src="message.wav"/> </s> <s>This is the same audio at approximately half the original signal amplitude: <audio soundLevel="-6dB" src="message.wav"/> </s> </speak>
speed
属性speed
属性は、参照されているオーディオの再生速度を制御し、元の波形の速度と比べて再生の実効速度を加速または減速させます。引数の値は絶対的な再生速度が定まるのではなく、元の波形の再生速度と相対的です。これらの属性に対する合成プロセッサのサポートは、拡張プロファイルにおいて必須です(REQUIRED)。
名前 | 必須 | タイプ | デフォルト値 | 説明 |
---|---|---|---|---|
speed |
false | x% (xが正の実数値であるとき) |
デフォルト値は100%で、未変更のオーディオ波形の速度に対応する。 | 元の速度との比較における、参照しているオーディオの再生速度。 元の波形の速度に対するパーセンテージで求める速度を設定する。 |
speed
属性の値を変更すると、録音されたサンプルの再生速度が変化します。これがピッチに影響する可能性があることに注意してください。
下記にspeed
属性の使用方法の例を挙げます。
<speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis-extended.xsd" xml:lang="en-US"> <s>This is the original, unmodified waveform: <audio src="message.wav"/> </s> <s>This is the same audio at twice the speed: <audio speed="200%" src="message.wav"/> </s> <s>This is the same audio at half the original speed: <audio speed="50%" src="message.wav"/> </s> </speak>
mark要素は、テキスト/タグの文字列にマーカーを付ける空要素です。これには、必須の(REQUIRED)属性であるname
が1つあり、これはxsd:token
[SCHEMA2 3.3.2項]というタイプに属しています。mark要素は、テキスト/タグの文字列の特定の位置を参照するために使用でき、さらに、非同期通知の出力ストリームにマーカーを挿入するためにも使用できます。合成プロセッサは、mark要素を処理する際に、下記の一方あるいは両方を行わなければなりません(MUST)。
name
属性の値と、それに対応する表現された出力データ内の位置をプラットフォームが検索可能となる情報をホスティング環境に通知する。name
属性を含んでいるイベントを発行する。ホスティング環境は、イベントの行き先を定義します。mark要素は音声出力処理に影響を与えません。
<?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US"> Go from <mark name="here"/> here, to <mark name="there"/> there! </speak>
desc要素は、audio要素のコンテンツ内にのみ記述できます。audio内で参照されているオーディオ・ソースが音声でない(例えば、audio wallpaperやsonicon punctuation)場合には、desc要素という、オーディオ・ソースに関して記述した(例えば「ドアを閉めている」)テキストのコンテンツを含んでいるべきです。合成プロセッサが、テキストのみの出力データを作成している場合には、audio内の他の代替コンテンツの代わりにdesc要素のコンテンツを表示すべきです(SHOULD)。任意の(OPTIONAL)xml:lang属性を用いて、要素のコンテンツの言語がその要素を囲い込んでいるコンテンツの言語とは異なることを示すことができます。任意の(OPTIONAL)onlangfailure
属性を用いて、言語の読み上げに失敗したときの望ましい挙動を指定することができます。
<?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US"> <!-- Normal use of <desc> --> Heads of State often make mistakes when speaking in a foreign language. One of the most well-known examples is that of John F. Kennedy: <audio src="ichbineinberliner.wav">If you could hear it, this would be a recording of John F. Kennedy speaking in Berlin. <desc>Kennedy's famous German language gaffe</desc> </audio> <!-- Suggesting the language of the recording --> <!-- Although there is no requirement that a recording be in the current language (since it might even be non-speech such as music), an author might wish to suggest the language of the recording by marking the entire <audio> element using <lang>. In this case, the xml:lang attribute on <desc> can be used to put the description back into the original language. --> Here's the same thing again but with a different fallback: <lang xml:lang="de-DE"> <audio src="ichbineinberliner.wav">Ich bin ein Berliner. <desc xml:lang="en-US">Kennedy's famous German language gaffe</desc> </audio> </lang> </speak>
desc要素には、説明文のみを含むことができます。
このドキュメントは、W3C音声読み上げブラウザ・ワーキンググループおよびその他のW3Cワーキンググループの次の参加者(姓のアルファベット順に記述)により作成されました。
さらに、編集者は、W3C国際化ワーキンググループのメンバーに感謝を表します。彼らはSSML 1.0および1.1に関し、重要なレビューや貢献をしてくださいました。
この付録は規範的です。
SSMLでは、プラットフォームが下記で指定しているオーディオ・フォーマットの再生をサポートしている必要があります。
オーディオ・フォーマット | メディア・タイプ |
---|---|
Raw (headerless) 8kHz 8-bit mono mu-law (PCM) single channel. (G.711) | audio/basic ([RFC1521]にあるもの) |
Raw (headerless) 8kHz 8 bit mono A-law (PCM) single channel. (G.711) | audio/x-alaw-basic |
WAV (RIFF header) 8kHz 8-bit mono mu-law (PCM) single channel. | audio/x-wav |
WAV (RIFF header) 8kHz 8-bit mono A-law (PCM) single channel. | audio/x-wav |
「audio/basic」というメディア・タイプは、一般的に「au」ヘッダ・フォーマットおよびヘッダがない8-bit 8kHz μ-Lawフォーマットとともに用いられます。このメディア・タイプを再生に指定する場合には、μ-Lawフォーマットを使用しなければなりません(MUST)。「audio/basic」というメディア・タイプで再生する場合、プロセッサは、μ-Lawフォーマットをサポートしなければならず(MUST)、「au」フォーマットをサポートできます(MAY)。
この付録は規範的です。
SSMLはXML[XML 1.0またはXML 1.1]の応用であり、したがって、標準の汎用文字セットを定義している[UNICODE]をサポートしています。
SSMLは、xml:lang
属性を用いて読み上げられる言語を制御するメカニズムを提供します。言語を変更しすぎると出力されるオーディオの音質が低下することがありますが、言語の変更は、トークン(単語)と同じ頻度で生じる可能性があります。SSMLでは、lexicon要素とphoneme要素を用いて、今はごくわずかしか商業的にサポートされていない言語のデフォルト辞書の品質を改善できるような機能により、出力データの発音をよりうまく制御できるようになります。
この付録は規範的です。
音声合成マークアップ言語仕様に関連付けられているメディア・タイプは「application/ssml+xml」で、ファイル名の拡張子は[RFC4267]で定義されている「.ssml」です。
この付録は規範的です。
コア・プロファイル(2.2.5項)の合成スキーマはhttp://www.w3.org/TR/speech-synthesis11/synthesis.xsdにあり、拡張プロファイル(2.2.5項)のスキーマはhttp://www.w3.org/TR/speech-synthesis11/synthesis-extended.xsdにあります。
注: 合成スキーマには、コア・プロファイルと拡張プロファイルの非名前空間スキーマが含まれており、それぞれ、http://www.w3.org/TR/speech-synthesis11/synthesis-nonamespace.xsdとhttp://www.w3.org/TR/speech-synthesis11/synthesis-nonamespace-extended.xsdにあります。これは、合成非名前空間スキーマに組み込まれている音声合成マークアップ言語断片(2.2.1項)を指定する根拠として使用できます(MAY)。さらに、安定性のためには、上記のスキーマ・ファイルに下記の日付け付きURIを使用することを推奨します(RECOMMENDED)。
この付録は参考情報です。
下記は電子メール・メッセージのヘッダの読み上げ例です。テキスト構造を記述するためにp要素とs要素を用いています。break要素は、時間の前に置き、聞き手が注意を払うべき重要な情報として時間を目立たせる効果があります。ユーザが詳細を聞きとって書き留める時間の余裕を持てるよう、電子メールの件名を読み上げる速度を遅くするためにprosody要素を用いています。
<?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US"> <p> <s>You have 4 new messages.</s> <s>The first is from Stephanie Williams and arrived at <break/> 3:45pm. </s> <s> The subject is <prosody rate="-20%">ski trip</prosody> </s> </p> </speak>
次の例では、音楽のコレクションについての情報を提供するためにオーディオ・ファイルと、読み上げ音声を組み合わせています。
<?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US"> <p> <voice gender="male"> <s>Today we preview the latest romantic music from Example.</s> <s>Hear what the Software Reviews said about Example's newest hit.</s> </voice> </p> <p> <voice gender="female"> He sings about issues that touch us all. </voice> </p> <p> <voice gender="male"> Here's a sample. <audio src="http://www.example.com/music.wav"/> Would you like to buy it? </voice> </p> </speak>
多くの場合、著者は言語を切り替える(例えば、lang要素により)必要なしに、アプリケーションに外国のテキスト(例えば、映画のタイトルなど)を少し含みたいと考えます。これをシンプルに行う方法は、ここに示しているとおりです。この例では、合成プロセッサは、外国語を知らない読者が読もう(そして、発音しよう)とするのと同じような方法で、コンテナ言語の発音規則(この場合、「en-US」)を用いて映画名を表現するでしょう。
<?xml version="1.0" encoding="ISO-8859-1"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US"> The title of the movie is: "La vita e bella" (Life is beautiful), which is directed by Roberto Benigni. </speak>
外部辞書(3.1.5項を参照)の発音をカスタマイズする、または、次の例で示しているようなphoneme要素を用いるなどの追加作業を行えば、出力データの品質が大幅に改善される可能性があります。
IPA文字のサポートが任意の(OPTIONAL)機能であり、外部言語の音素が何らかの近似値で再生されるかもしれないことをお知らせしておく必要があるでしょう(詳細は、3.1.5項を参照)。次の例は、一般的なアメリカ英語の音素のみを用いています。
<?xml version="1.0" encoding="ISO-8859-1"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US"> The title of the movie is: <phoneme alphabet="ipa" ph="ˈlɑ ˈviːɾə ˈʔeɪ ˈbɛlə"> La vita e bella </phoneme> <!-- The IPA pronunciation is ˈlɑ ˈviːɾə ˈʔeɪ ˈbɛlə --> (Life is beautiful), which is directed by <phoneme alphabet="ipa" ph="ɹəˈbɛːɹɾoʊ bɛˈniːnji"> Roberto Benigni </phoneme> <!-- The IPA pronunciation is ɹəˈbɛːɹɾoʊ bɛˈniːnji --> <!-- Note that in actual practice an author might change the encoding to UTF-8 and directly use the Unicode characters in the document rather than using the escapes as shown. The escaped values are shown for ease of copying. --> </speak>
SMIL言語[SMIL3]は、XMLベースのマルチメディア制御言語です。これは特に、合成読み上げ出力データを含んでいる動的メディアのアプリケーションの記述に適しています。
「greetings.ssml」というファイルには下記が含まれています。
<?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US"> <s> <mark name="greetings"/> <emphasis>Greetings</emphasis> from the <sub alias="World Wide Web Consortium">W3C</sub>! </s> </speak>
SMILの例1: W3Cのロゴ画像が現われ、1秒後に音声が再生されます。「greetings.smil」というファイルには下記が含まれています。
<smil xmlns="http://www.w3.org/ns/SMIL" version="3.0" baseProfile="Language"> <head> <top-layout width="640" height="320"> <region id="whole" width="640" height="320"/> </top-layout> </head> <body> <par> <img src="http://www.w3.org/Icons/w3c_home" region="whole" begin="0s"/> <ref src="greetings.ssml" begin="1s"/> </par> </body> </smil>
SMILの例2: W3Cのロゴ画像が現われ、画像をクリックすると消え、音声が再生されます。「greetings.smil」というファイルには下記が含まれています。
<smil xmlns="http://www.w3.org/ns/SMIL" version="3.0" baseProfile="Language"> <head> <top-layout width="640" height="320"> <region id="whole" width="640" height="320"/> </top-layout> </head> <body> <seq> <img id="logo" src="http://www.w3.org/Icons/w3c_home" region="whole" begin="0s" end="logo.activateEvent"/> <ref src="greetings.ssml"/> </seq> </body> </smil>
下記は、音声読み上げブラウザ・アプリケーション用のVoiceXML(2.3.3項を参照)によるSSMLの例です。VoiceXML名前空間に、SSMLの名前空間要素と属性が含まれていることは、注目に値します。詳細は、[VXML]の付録Oを参照してください。
<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"> <form> <block> <prompt> <emphasis>Welcome</emphasis> to the Bird Seed Emporium. <audio src="rtsp://www.birdsounds.example.com/thrush.wav"/> We have 250 kilogram drums of thistle seed for $299.95 plus shipping and handling this month. <audio src="http://www.birdsounds.example.com/mourningdove.wav"/> </prompt> </block> </form> </vxml>
この付録は参考情報です。
SSML 1.1のみをサポートしている合成プロセッサのために、SSML 1.0適合ドキュメントを変更する際の互換性に関する注意事項をドキュメントの著者にお知らせします。
また、下記は、SSML 1.0以後の変更を網羅した統合リストです。
この付録は参考情報です。
SSML 1.1仕様の勧告案の発表後、指摘に応じて、草案に次のマイナーな編集上の変更が加えられました。