音声合成マークアップ言語 (SSML) とテキスト読み上げを使用して、音声の発音方法を指定できます。 たとえば、発音を改善するために、音素とカスタム辞書で SSML を使用できます。 SSML を使用して、単語または数式の発音方法を定義することもできます。
SSML 要素を使用して発音を改善する方法の詳細については、以下のセクションを参照してください。 SSML 構文の詳細については、「SSML ドキュメントの構造とイベント」を参照してください。
phoneme 要素
phoneme 要素は、SSML ドキュメントの発音のために使用します。 常に人間が判読できる音声をフォールバックとして提供します。
音標文字は音素で構成され、英字、数字、または文字から成り、場合によってはその組み合わせで構成されます。 それぞれの音素は、音声の一意の音を示します。 音声記号は、1 つの文字が複数の発音を表す場合があるラテン文字とは対照的です。 "candy" と "cease" という単語の文字 "c" の en-US での異なる発音や、"thing" と "those" の文字の組み合わせ "th" の異なる発音を考えてみてください。
Note
音素をサポートするロケールの一覧については、言語サポートの表の脚注を参照してください。
phoneme 要素の属性の使用方法を次の表に示します。
| 属性 | 説明 | 必須または省略可能 |
|---|---|---|
alphabet |
ph 属性の文字列の発音を合成するときに使用する音標文字。 アルファベット順を指定する文字列は、小文字で指定する必要があります。 指定できるオプションのアルファベットは次のとおりです。
アルファベットは、要素内の phoneme にのみ適用されます。 |
省略可能 |
ph |
phoneme 要素内の単語の発音を指定する音素を含む文字列。
各ロケールでは、特定の電話セットがサポートされています。
SSML のふりがなのアルファベットを参照してください。 指定した文字列に認識できない電話が含まれている場合、テキスト読み上げサービスは無効な SSML に対して http 400 エラーを返します。ipa の場合、1 つの音節を強調するためにこの音節の前にストレス記号を配置するには、単語のすべての音節にマークを付ける必要があります。 それ以外の場合は、このストレス記号の前の音節が強調されます。
sapi の場合、1 つの音節を強調する場合は、単語のすべての音節がマークされているかどうかに関係なく、この音節の後にストレス記号を配置する必要があります。 |
必須 |
phoneme の例
phoneme 要素の属性でサポートされている値については、前に説明しました。 最初の 2 つの例では、ph="tə.ˈmeɪ.toʊ" または ph="təmeɪˈtoʊ" の値を指定して音節 meɪ を強調しています。
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
<phoneme alphabet="ipa" ph="tə.ˈmeɪ.toʊ"> tomato </phoneme>
</voice>
</speak>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
<phoneme alphabet="ipa" ph="təmeɪˈtoʊ"> tomato </phoneme>
</voice>
</speak>
<speak version="1.0" xmlns="https://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
<phoneme alphabet="sapi" ph="iy eh n y uw eh s"> en-US </phoneme>
</voice>
</speak>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
<s>His name is Mike <phoneme alphabet="ups" ph="JH AU"> Zhou </phoneme></s>
</voice>
</speak>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
<phoneme alphabet='x-sampa' ph='he."lou'>hello</phoneme>
</voice>
</speak>
カスタム辞書
phoneme と sub 要素を使用して、SSML で単一のエンティティ (会社、医療用語、絵文字など) を読み取る方法を定義できます。 複数のエンティティの読み取り方法を定義するには、XML 構造化カスタム辞書ファイルを作成します。 次に、カスタム辞書 XML ファイルをアップロードし、SSML の lexicon 要素で参照します。
Note
カスタム辞書をサポートするロケールの一覧については、言語サポートの表の脚注を参照してください。
lexicon要素は、Long Audio API ではサポートされていません。 長い形式のテキスト読み上げの場合は、代わりに batch synthesis API (プレビュー) を使用してください。
lexicon 要素の属性の使用方法を次の表に示します。
| 属性 | 説明 | 必須または省略可能 |
|---|---|---|
uri |
.xml と .pls のいずれかのファイル拡張子を持つ、パブリックにアクセス可能なカスタム辞書 XML ファイルの URI。
Azure Blob Storage の使用は推奨されますが、必須ではありません。GitHub URI やその他のパブリックにアクセス可能なリンクもサポートされています。 カスタム辞書ファイルの詳細については、「Pronunciation Lexicon Specification (PLS) Version 1.0 (発音辞書仕様 (PLS) バージョン 1.0)」を参照してください。 |
必須 |
カスタム辞書の例
lexicon 要素の属性でサポートされている値については、前に説明しました。
カスタム辞書を発行した後は、SSML から参照できます。 次の SSML の例では、https://www.example.com/customlexicon.xml にアップロードされたカスタム辞書を参照しています。 Azure Blob Storage の辞書 URL がサポートされています。 ただし、他のパブリック URL には互換性がない場合があることに注意してください。
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
xmlns:mstts="http://www.w3.org/2001/mstts"
xml:lang="en-US">
<voice name="en-US-AvaNeural">
<lexicon uri="https://www.example.com/customlexicon.xml"/>
BTW, we will be there probably at 8:00 tomorrow morning.
Could you help leave a message to Robert Benigni for me?
</voice>
</speak>
カスタム辞書ファイル
複数のエンティティの読み取り方法を定義するために、.xml と .pls のいずれかのファイル拡張子を持つカスタム辞書 XML ファイルでそれらを定義できます。
Note
カスタム辞書ファイルは有効な XML ドキュメントですが、SSML ドキュメントとして使用することはできません。
カスタム辞書ファイルの制限事項をいくつか次に示します。
- ファイル サイズ: カスタム辞書ファイルのサイズは、最大 100 KB に制限されています。 ファイル サイズが 100 KB の制限を超えると、合成要求が失敗します。 ファイル サイズが 100 KB を超える場合は、辞書を複数の辞書に分割し、SSML に含めることができます。
- 辞書キャッシュの更新: カスタム辞書は URI をキーとして、最初に読み込まれるときにテキスト読み上げにキャッシュされます。 15 分間は同じ URI の辞書が再読み込みされないため、カスタム辞書の変更が反映されるまでに最大 15 分間待つ必要があります。
カスタム辞書 XML ファイルでサポートされている要素と属性については、「発音辞書仕様 (PLS) バージョン 1.0」を参照してください。 サポートされている要素と属性の例をいくつか次に示します。
-
lexicon要素には、少なくとも 1 つのlexeme要素が含まれています。 辞書には、適用されるロケールを示すために必要なxml:lang属性が含まれています。 1 つのカスタム辞書は、設計上 1 つのロケールに制限されています。そのため、別のロケールに適用しても機能しません。lexicon要素には、辞書で使用されるアルファベットを示すalphabet属性もあります。 設定可能な値は、ipaおよびx-microsoft-sapiです。 - 各
lexeme要素には、少なくとも 1 つのgrapheme要素と、1 つ以上のgrapheme、alias、およびphoneme要素が含まれています。 カスタム辞書では、lexeme要素は大文字と小文字が区別されます。 たとえば、lexeme"Hello" に対する音素のみを指定した場合、それはlexeme"hello" に対して機能しません。 -
grapheme要素には、正書法 を説明するテキストが含まれています。 -
alias要素は、頭字語または短縮語の発音を示すために使用されます。 -
phoneme要素には、lexemeの発音方法を説明するテキストを指定します。 音節境界は、国際音声記号では "." です。 国際音声記号を使用するときは、phoneme要素に空白を含めることはできません。 -
aliasとphonemeの要素が同じgrapheme要素で指定されている場合、aliasの優先順位が高くなります。
Microsoft は、カスタム辞書ファイルでエラー (詳細なエラー メッセージを含む) を見つけるのに役立つカスタム辞書の検証ツールを提供しています。 音声サービスを使用して運用環境でカスタム辞書 XML ファイルを使用する前に、ツールを使用することをお勧めします。
カスタム辞書ファイルの例
次の XML の例 (SSML ではない) を、カスタム辞書 .xml ファイルに含めることが考えられます。 このカスタム辞書を使用すると、"BTW" は "By the way" と読まれます。"Benigni" は、IPA の指定により "bɛˈniːnji." と読まれます。
<?xml version="1.0" encoding="UTF-8"?>
<lexicon version="1.0"
xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
alphabet="ipa" xml:lang="en-US">
<lexeme>
<grapheme>BTW</grapheme>
<alias>By the way</alias>
</lexeme>
<lexeme>
<grapheme>Benigni</grapheme>
<phoneme>bɛˈniːnji</phoneme>
</lexeme>
<lexeme>
<grapheme>😀</grapheme>
<alias>test emoji</alias>
</lexeme>
</lexicon>
カスタム 辞書を使用して、語句の発音を直接設定することはできません。 頭字語または短縮語の発音を設定する必要がある場合は、まず alias を指定し、次に phoneme をその alias に関連付けます。 次に例を示します。
<?xml version="1.0" encoding="UTF-8"?>
<lexicon version="1.0"
xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
alphabet="ipa" xml:lang="en-US">
<lexeme>
<grapheme>Scotland MV</grapheme>
<alias>ScotlandMV</alias>
</lexeme>
<lexeme>
<grapheme>ScotlandMV</grapheme>
<phoneme>ˈskɒtlənd.ˈmiːdiəm.weɪv</phoneme>
</lexeme>
</lexicon>
また、頭字語または略語に対して期待される alias を直接指定することもできます。 次に例を示します。
<lexeme>
<grapheme>Scotland MV</grapheme>
<alias>Scotland Media Wave</alias>
</lexeme>
上記のカスタム辞書 XML ファイルの例では、国際音声記号 (IPA 音素セットとも呼ばれます) を使用しています。 IPA は国際標準であるため、IPA を使用することをお勧めします。 一部の IPA 文字には、Unicode で表現するときに "事前構成される" バージョンと "分解される" バージョンがあります。 カスタム辞書では、分解される Unicode のみがサポートされます。
Speech Service では、 en-US、 en-CA、 fr-FR、 fr-CA、fr-BE、 fr-CH、 de-DE、 de-AT、 de-CH、 es-ES、 ja-JP、 zh-CN、 zh-HK、 yue-CN、 zh-TWの、これらのロケールの sapi ふりがなセットを定義します。 詳細な Speech サービスの発音記号については、「Speech サービス発音設定」を参照してください。
カスタム辞書では、ここで示すように、x-microsoft-sapi 属性の値として alphabet を使用できます。
<?xml version="1.0" encoding="UTF-8"?>
<lexicon version="1.0"
xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
alphabet="x-microsoft-sapi" xml:lang="en-US">
<lexeme>
<grapheme>BTW</grapheme>
<alias> By the way </alias>
</lexeme>
<lexeme>
<grapheme> Benigni </grapheme>
<phoneme> b eh 1 - n iy - n y iy </phoneme>
</lexeme>
</lexicon>
say-as 要素
say-as 要素は、要素のテキストのコンテンツの種類 (数値や日付など) を示す要素です。 この要素により、音声合成エンジンにテキストを発音する方法に関するガイダンスが提供されます。
say-as 要素の属性の使用方法を次の表に示します。
| 属性 | 説明 | 必須または省略可能 |
|---|---|---|
interpret-as |
要素のテキストのコンテンツの種類を示します。 種類の一覧については、次の表を参照してください。 | 必須 |
format |
あいまいな形式を持つ可能性のあるコンテンツ タイプに対して、要素のテキストの正確な書式設定に関する追加情報を提供します。 SSML では、それらを使用するコンテンツの種類の形式が定義されます。 次の表を参照してください。 | 省略可能 |
detail |
読み上げられる詳細のレベルを示します。 たとえば、この属性では、音声合成エンジンが句読点を発音するように要求する場合があります。
detail に対して定義されている標準値はありません。 |
省略可能 |
次のコンテンツの種類が interpret-as および format の属性でサポートされています。 この表で、format 列が空でない場合にのみ、format 属性を含めます。
Note
characters 属性の spell-out 値と interpret-as 値は、すべてのテキスト読み上げロケールでサポートされています。
その他の interpret-as 属性値は、アラビア語、カタロニア語、中国語、デンマーク語、オランダ語、英語、フランス語、フィンランド語、ドイツ語、ヒンディー語、イタリア語、日本語、韓国語、ノルウェー語、ポーランド語、ポルトガル語、ロシア語、スペイン語、スウェーデン語のすべてのロケールでサポートされています。
| interpret-as | format | 解釈 |
|---|---|---|
characters、spell-out |
テキストは、個別の文字 (綴り) として読み上げられます。 音声合成エンジンでは次のように発音されます。<say-as interpret-as="characters">test</say-as>"T E S T"。 |
|
cardinal、number |
なし | テキストは基数として読み上げられます。 音声合成エンジンでは次のように発音されます。There are <say-as interpret-as="cardinal">10</say-as> options"10 個のオプションがあります"。 |
ordinal |
なし | テキストは序数として読み上げられます。 音声合成エンジンでは次のように発音されます。Select the <say-as interpret-as="ordinal">3rd</say-as> option"3 つ目のオプションを選択します"。 |
number_digit |
なし | テキストは、個別の数字のシーケンスとして読み上げられます。 音声合成エンジンでは次のように発音されます。<say-as interpret-as="number_digit">123456789</say-as>"1 2 3 4 5 6 7 8 9"。 |
fraction |
なし | テキストは分数として読み上げられます。 音声合成エンジンでは次のように発音されます。<say-as interpret-as="fraction">3/8</say-as> of an inch"three eighths of an inch" (1 インチの 8 分の 3)。 |
date |
dmy、mdy、ymd、ydm、ym、my、md、dm、d、m、y | テキストは日付として読み上げられます。
format 属性では、日付の形式を指定します (d=日、m=月、y=年)。 音声合成エンジンでは次のように発音されます。Today is <say-as interpret-as="date">10-12-2016</say-as>「今日は 2016 年 10 月 12 日です。」として 発音: Today is <say-as interpret-as="date" format="dmy">10-12-2016</say-as>「今日は 2016 年 12 月 10 日です。」として |
time |
hms12、hms24 | テキストは時刻として読み上げられます。
format 属性では、時刻が 12 時間形式 (hms12) または 24 時間形式 (hms24) のどちらを使用するかを指定します。 時間、分、秒を表す数字を区切るには、コロンを使用します。 有効な時間例をいくつか示します: 12:35、1:14:32、08:15、02:50:45。 音声合成エンジンでは次のように発音されます。The train departs at <say-as interpret-as="time" format="hms12">4:00am</say-as>"The train departs at four A M" (この電車は午前 4 時に発車します)。 |
duration |
hms、hm、ms | テキスト メッセージは期間として読み上げられます。 このformat属性は、期間のフォーム (h=hour、m=minute、および s=second) を指定します。 音声合成エンジンでは次のように発音されます。<say-as interpret-as="duration">01:18:30</say-as>"1 時間 18 分 30 秒" として。 発音: <say-as interpret-as="duration" format="ms">01:18</say-as>"1 分 18 秒" として。 このタグは、英語とスペイン語でのみサポートされています。 |
telephone |
なし | テキストは電話番号として読み上げられます。 音声合成エンジンでは次のように発音されます。The number is <say-as interpret-as="telephone">(888) 555-1212</say-as>"My number is area code eight eight eight five five five one two one two" (私の番号は市外局番 888 555 1212 です)。 |
currency |
なし | テキストは通貨として読み上げられます。 音声合成エンジンでは次のように発音されます。<say-as interpret-as="currency">99.9 USD</say-as>"99 米ドルと 90 セント"。 |
address |
なし | テキストはアドレスとして読み上げられます。 音声合成エンジンでは次のように発音されます。I'm at <say-as interpret-as="address">150th CT NE, Redmond, WA</say-as>"I'm at 150th Court Northeast Redmond Washington." (私はワシントン州レドモンド 150th コート ノースイーストにいます)。 |
name |
なし | テキストは個人名として読み上げられます。 音声合成エンジンでは次のように発音されます。<say-as interpret-as="name">ED</say-as>[æd] です。 中国語名では、一部の文字は姓に出現するときに異なる発音になります。 たとえば、音声合成エンジンでは、次における仇の発音は <say-as interpret-as="name">仇先生</say-as>[chóu] ではなく [qiú] です。 |
say-as の例
say-as 要素の属性でサポートされている値については、前に説明しました。
音声合成エンジンは、"Your first request was for one room on October nineteenth twenty ten with early arrival at twelve thirty five PM" (最初のリクエストは 2010 年 10 月 19 日に 1 部屋、午後 12 時 35 分にアーリー アライバル、というものでした) という例を読み上げます。
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-Ava:DragonHDLatestNeural">
<p>
Your <say-as interpret-as="ordinal"> 1st </say-as> request was for <say-as interpret-as="cardinal"> 1 </say-as> room
on <say-as interpret-as="date" format="mdy"> 10/19/2010 </say-as>, with early arrival at <say-as interpret-as="time" format="hms12"> 12:35pm </say-as>.
</p>
</voice>
</speak>
sub 要素
sub 要素を使用して、要素で囲んだテキストの代わりにエイリアス属性のテキスト値を発音する必要があることを示します。 このようにして、SSML に、音声と書き込みの両方の形式を含めます。
sub 要素の属性の使用方法を次の表に示します。
| 属性 | 説明 | 必須または省略可能 |
|---|---|---|
alias |
要素で囲んだテキストの代わりに発音する必要があるテキスト値。 | 必須 |
sub の例
sub 要素の属性でサポートされている値については、前に説明しました。
音声合成エンジンでは、次の例を "World Wide Web Consortium" と読み上げます。
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-Ava:DragonHDLatestNeural">
<sub alias="World Wide Web Consortium">W3C</sub>
</voice>
</speak>
数式の読み取り
数式を読み取る方法は 2 つあります。
Math domain 要素を使用する場合、
プレーン テキストの数式を SSML に直接埋め込み、
<mstts:prompt domain="Math" />を使用して数学ドメインを指定します。「プレーンテキスト数式の読み取り」セクションを参照してください。
MathML 要素を使用する
MathML 要素を使用して数式を表します。
「MathML を使用した数式の読み取り」セクションを参照してください
Note
現在、2 つの機能は、de-DE、en-AU、en-GB、en-US、英語のすべての兄弟ロケール、es-ES、es-MX、スペイン語のすべての兄弟ロケール、fr-FR、fr-CAit-IT、it-IT、ja-JP、ko-KR、pt-BR、および zh-CNでサポートされています。
プレーン テキスト数式の読み取り
複雑な数式の読み取りを有効にするには、 <mstts:prompt domain="Math" /> 要素を追加して、数学固有の発音規則を有効にすることができます。
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="en-US">
<voice name="en-US-AvaMultilingualNeural">
<mstts:prompt domain="Math" />
x = (-b ± √(b² - 4ac)) / 2a
</voice>
</speak>
デフォルトでは、かっこは数式中では読み上げられません。
かっこを読み上げてほしい場合は、SSML で <mstts:mathspeechverbosity level="verbose" /> を指定できます
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="en-US">
<voice name="en-US-AvaMultilingualNeural">
<mstts:prompt domain="Math" /><mstts:mathspeechverbosity level="verbose" />
x = (-b ± √(b² - 4ac)) / 2a
</voice>
</speak>
多言語音声を使用して他の言語で式を読み上げたい場合は、SSML で lang 要素を指定します。
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="en-US">
<voice name="en-US-AvaMultilingualNeural">
<mstts:prompt domain="Math" />
<lang xml:lang="es-ES">x = (-b ± √(b² - 4ac)) / 2a</lang>
</voice>
</speak>
MathML を使用した数式の読み取り
数学マークアップ言語 (MathML) は、数学的なコンテンツと構造を記述する XML 準拠のマークアップ言語です。 音声サービスでは、MathML を入力テキストとして使用して、数学的表記を出力音声で適切に発音できます。
MathML 2.0 と MathML 3.0 の仕様のすべての要素がサポートされています (ただし、MathML 3.0 の初等数学要素を除く)。
次の MathML 要素と属性に注意してください。
-
xmlnsの<math xmlns="http://www.w3.org/1998/Math/MathML">属性は省略できます。 -
semantics、annotation、annotation-xmlの各要素は音声を出力しないため、無視されます。 - 要素が認識されない場合は無視されますが、その要素内の子要素は引き続き処理されます。
MathML エンティティは XML 構文ではサポートされていないため、エンティティを表すには対応する Unicode 文字を使う必要があります。たとえば、エンティティ © は Unicode 文字 © で表す必要があります。そうしないと、エラーが発生します。
MathML の例
この例のテキスト読み上げ出力は、"a squared plus b squared equals c squared" です。
<speak version='1.0' xmlns='http://www.w3.org/2001/10/synthesis' xmlns:mstts='http://www.w3.org/2001/mstts' xml:lang='en-US'>
<voice name='en-US-JennyNeural'>
<math xmlns='http://www.w3.org/1998/Math/MathML'>
<msup>
<mi>a</mi>
<mn>2</mn>
</msup>
<mo>+</mo>
<msup>
<mi>b</mi>
<mn>2</mn>
</msup>
<mo>=</mo>
<msup>
<mi>c</mi>
<mn>2</mn>
</msup>
</math>
</voice>
</speak>