1. はじめに・設計目標
このセクションは規範的でありません。
情報の音声提示は、視覚障害者や視覚に不自由のある方、印刷物を利用できない方々によく利用されています。 例えば、「スクリーンリーダー」は、視覚的インターフェースへ通常アクセスできないユーザーがそれと対話できるようにします。 また、聞くという手段が(読むことに対して)好まれる、あるいは必要とされる状況もあります。これは人の身体的な能力に関係なく起こり得ます。 例えば、車を運転中に電子書籍を再生する場合や、産業用・医療用機器の操作方法を学ぶ場合、家庭用エンターテイメントシステムと対話する場合、幼児に読み方を教える場合などです。
このSpeechモジュールで定義されるCSSプロパティにより、著者はドキュメントを音声的にどのように提示するかを宣言的に制御できます。 ドキュメントの音声レンダリングは、音声合成(「TTS」=「テキスト・トゥ・スピーチ」の略)と、聴覚アイコン(本仕様では「オーディオキュー」と呼びます)の組み合わせです。 CSS Speechプロパティは、音声のピッチや速度、音量、TTSの声などを制御する機能を提供します。 これらのスタイルシートプロパティは、視覚プロパティ(メディアの混合)と組み合わせて使うことも、視覚提示の完全な音声代替として使うこともできます。
2. 背景情報・CSS 2.1
このセクションは規範的でありません。
CSS Speechモジュールは、情報提供的な CSS2.1 オーラル付録 を再構成したものです。 そこでは aural メディアタイプが記述されていましたが、(現在は speech メディアタイプが推奨されていたものの、それも現在は廃止されています)廃止されました。 [CSS2] 仕様では speech メディアタイプが予約されていましたが、 対応するプロパティ自体は定義されていませんでした。 Speechモジュールでは、音声出力に適用されるCSSプロパティを説明し、音声次元専用の新しい「ボックス」モデルを定義しています。
コンテンツ制作者は、テキスト読み上げ合成機能を持つユーザーエージェント向けに、任意のメディアタイプ用のCSSプロパティを含めることができます。ただし、通常は all や screen でのみ意味を持ちます。 これらのスタイルは、Speechモジュールをサポートしないユーザーエージェントでは無視されます。
3. SSMLとの関係
このセクションは規範的でありません。
本仕様のいくつかの機能は、Speech Synthesis Markup Language (SSML) Version 1.1 [SSML] で記述されている機能と概念的に類似しています。 ただし、CSSモデルの特性上、構文や意味論の互換性は部分的にしか実現できません。 Speechモジュール内の各プロパティの定義には、必要に応じて、 SSMLの類似機能との関係を明確にするための参考情報が記載されています。
3.1. 値の定義
本仕様では、CSSプロパティ定義の慣例([CSS2])および 値定義構文([CSS-VALUES-3])に従います。 本仕様で定義されていない値型は、CSS Values & Units [CSS-VALUES-3]で定義されています。 他のCSSモジュールと組み合わせることで、これらの値型の定義が拡張される場合もあります。
各プロパティ固有の値に加え、 本仕様で定義されるすべてのプロパティは、CSS全体キーワード もプロパティ値として受け付けます。 可読性のため、これらは明示的には繰り返していません。
4. 例
heidi
が付いた段落は左のオーディオチャンネル(かつ女性の声など)で、
peter
クラスは右チャンネル(かつ男性の声など)でレンダリングされます。
special
クラスのテキストスパンは、通常より小さい音量で再生され、読み上げ後に強いポーズ(プロソディック境界)が入ります
(
span
要素は親段落からvoice-familyを継承する点に注意)。
h1, h2, h3, h4, h5, h6 { voice-family: paul; voice-stress: moderate; cue-before: url(../audio/ping.wav); voice-volume: medium 6dB; } p.heidi { voice-family: female; voice-balance: left; voice-pitch: high; voice-volume: -6dB; } p.peter { voice-family: male; voice-balance: right; voice-rate: fast; } span.special { voice-volume: soft; pause-after: strong; } ... <h1>I am Paul, and I speak headings.</h1> <p class="heidi">Hello, I am Heidi.</p> <p class="peter"> <span class="special">Can you hear me ?</span> I am Peter. </p>
5. オーラル整形モデル
音声メディア向けのCSS整形モデルは、 ビジュアルボックスモデル に類似した入れ子状の文脈内で発生する、音と無音の連続として構築されます。 これを オーラル「ボックス」モデル と呼びます。 オーラル「キャンバス」は2チャンネル(ステレオ)空間と時間的次元で構成され、 その中で合成音声とオーディオキューが共存します。 選択された要素は、rest、cue、pause プロパティで (内側から外側へ)囲まれます。 これらはそれぞれ、padding、border、 margin の音声的な対応物とみなせます。 ::before および ::after 疑似要素 [CSS2] を使うと、 要素の内容と rest の間に挿入されます。
次の図は、 ビジュアルボックスモデルとオーラルボックスモデルのプロパティの対応関係を、 選択された <element> へ適用した場合の例として示しています:
6. ミキシングプロパティ
6.1. voice-volume プロパティ
名前: | voice-volume |
---|---|
値: | silent | [[x-soft | soft | medium | loud | x-loud] || <decibel>] |
初期値: | medium |
適用対象: | すべての要素 |
継承: | yes |
パーセント値: | N/A |
算出値: | silent、またはキーワード値と(ゼロでなければ)デシベルオフセット |
正規順序: | 文法どおり |
voice-volume プロパティは、著者が音声合成器によって生成されるオーディオ波形の振幅を制御できるようにし、選択された要素のオーディオキューの相対的な音量レベルをオーラルボックスモデル内で調整するためにも使われます。
注記: このプロパティの機能はSSMLマークアップ言語prosody
要素のvolume
属性([SSML])と似ていますが、明確な違いもあります。たとえば、CSS
Speechの音量キーワードとデシベル単位は相互排他的ではなく、値が選択要素で継承・組み合わせられる方法によるものです。
- silent
-
音が生成されないことを指定します(テキストは「無音」で読み上げられます)。
注記: これは負の無限大デシベルを使用した場合と同じ効果があります。 また、voice-volumeプロパティがsilentの要素と、speakプロパティがnoneの要素との間には違いがあります。 前者の場合、選択要素は発話される場合と同じ時間を占有し、前後のポーズも含まれますが、音は生成されません(かつ、選択要素のオーラルボックスモデル内の子孫はvoice-volume値を上書きできるため、音声出力を生成する場合があります)。 後者の場合、選択要素は音声次元でレンダリングされず、再生のための時間も割り当てられません(選択要素のオーラルボックスモデル内の子孫はspeak値を上書きできるため、音声出力を生成する場合があります)。
- x-soft, soft, medium, loud, x-loud
- これらのキーワードは単調非減少な音量レベルに対応し、聴取者の知覚的な大きさの要求を満たすように実装依存の値にマッピングされます。 これらの音量レベルは通常、ユーザーが聴取環境に合わせてサウンドオプションを調整できる設定機構を通して提供されます。 x-softはユーザーの最小可聴音量に、 x-loudは最大許容音量に、 mediumは好みの音量に、 softとloudは中間値にマッピングされます。
- <decibel>
-
これは上記のキーワード値、もしくはルート要素のデフォルト値、あるいは継承された音量レベル(それ自体がキーワード値とデシベルオフセットの組み合わせである場合は、デシベル値が加算される)に対して相対的な(正または負の)変化を表します。
継承された音量レベルがsilentの場合、このvoice-volumeもsilentに解決されます(指定された<decibel>値にかかわらず)。
<decibel>型は、 "dB"(デシベル単位)単位識別子を持つ次元を示します。 デシベルは新しい信号の振幅a1と現在の振幅a0の二乗の比を 次の対数式で表します: volume(dB) = 20 × log10(a1 / a0)。
注記: -6.0dBは音声信号の振幅がおよそ半分、+6.0dBはおよそ2倍です。
注記: 知覚される音量は、聴取環境やユーザーの好み・身体的能力など、さまざまな要因に依存します。 x-softからx-loudまでの有効な音量差が オーディオ出力のダイナミックレンジ(音量の幅)となります。 一般に、このレンジは騒がしい環境下で圧縮されます。つまり、x-softに相当する実際の音量は静かな環境よりもx-loudに近くなります。 また、場合によってはx-softもx-loudも低音量になる環境(例:図書館、夜間の読書など)があり得ます。
6.2. voice-balance プロパティ
名前: | voice-balance |
---|---|
値: | <number> | left | center | right | leftwards | rightwards |
初期値: | center |
適用対象: | すべての要素 |
継承: | yes |
パーセント値: | N/A |
算出値: | -100 から 100(含む)の間の<number>に解決された指定値 |
正規順序: | 文法どおり |
voice-balance プロパティは、音声出力を横方向のサウンドステージ全体に空間的に分布させることを制御します。 片端が左、もう一端が右となり、リスナーの位置を基準とします。 著者は左右の端の間の中間段階も指定でき、左-右軸に沿ったオーディオの分離を表現できます。
注記: このプロパティの機能は、SSMLマークアップ言語[SSML]には対応するものがありません。
- <number>
- -100から100(含む)の間の数値。 -100未満は-100に、100より大きい値は100に丸められます。 -100は左端、100は右端を表します。 0は中央(左右に音の分離が感じられない点、ステレオシステムでは左右均等配分)を表します。
- left
- -100と同じです。
- center
- 0と同じです。
- right
- 100と同じです。
- leftwards
- 継承したvoice-balance値から20引き(結果が-100未満なら丸め)、音を左に寄せます。
- rightwards
- 継承したvoice-balance値に20足し(結果が100を超えたら丸め)、音を右に寄せます。
ユーザーエージェントはさまざまな種類のサウンドシステムに接続でき、音声ミキシングの能力も異なります。 モノラル、ステレオ、サラウンドシステムでの期待される動作は次のとおりです:
-
ユーザーエージェントがモノラル(単一スピーカ)システムを通じて音声を出す場合、 voice-balanceプロパティの効果はありません。
-
ユーザーエージェントがステレオ(例:2つのスピーカーやヘッドフォン)で出力する場合、 voice-balanceプロパティの値通りに左右分布が可能です。
-
ユーザーエージェントが2チャンネル以上(例:5.1chサラウンドなど)でミキシングできる場合でも、 voice-balance適用後の物理的な分布は、リスナーがステレオ配置で聞いているかのように調整すべきです。 たとえば、センターチャンネルや左右スピーカーを組み合わせて center値の動作をエミュレートします。
将来のCSS Speechモジュールでは、三次元オーディオのサポートが含まれる可能性があり、著者が「方位角」や「仰角」値を指定できるようになる見込みです。 そのため、現在の仕様で作成されたコンテンツは、将来の三次元オーディオ対応CSS Speechユーザーエージェントで再生される場合もあります。 この可能性に備え、現在のvoice-balanceプロパティで指定できる値は、「方位角」角度とも互換性を保つよう設計されています。 より具体的には、現在の左右音声軸(横方向サウンドステージ)と、リスナーの周囲360度平面とのマッピングは以下の通りです:
-
0は0度(center)。 これはリスナーの「前」位置(「後ろ」ではありません)。
-
-100は-40度(left)。 負の角度は反時計回り(上から見て)です。
-
100は40度(right)。 正の角度は時計回り(上から見て)です。
-
-100から100までの中間値は、-40度から40度までの角度に数値的に線形比例でマッピングされます。 例:-50は-20度。
注記: サウンドシステムがユーザー設定により、著者が指定した左右音声分布に影響する場合があります。 一般的に、現代のサウンドシステムにあるさまざまな「サラウンド」モード(基本的なステレオスピーカーでも)では、音声信号の空間配置が大きく変化します。 三次元音場の錯覚は、位相シフト、デジタルディレイ、音量制御(チャンネルミキシング)その他技法の組み合わせで実現されることが多いです。 一部ユーザーは、すべての音声をモノラルチャンネルに「ダウングレード」することもできます。その場合、voice-balanceプロパティの効果は全く認識できません。 このように、著者が作成したコンテンツの再生忠実度はユーザーのカスタマイズに依存し、voice-balanceプロパティはあくまで望ましい結果を指定するものです。
注記: 多くの音声合成エンジンはモノラルしか生成できず、voice-balanceプロパティを本質的にはサポートしません。 左右音声軸上での分布は、合成後(音声対応ユーザーエージェントがドキュメント内の各オーディオソースをミキシングする際)に行われます。
7. スピーキングプロパティ
7.1. speak プロパティ
名前: | speak |
---|---|
値: | auto | never | always |
初期値: | auto |
適用対象: | すべての要素 |
継承: | yes |
パーセント値: | N/A |
算出値: | 指定値 |
正規順序: | 文法どおり |
speakプロパティは、テキストを音声でレンダリングするかどうかを決定します。
注記: このプロパティの機能は、SSMLマークアップ言語[SSML]には対応するものがありません。
- auto
-
displayがnoneの場合、算出値はneverとなり、それ以外の場合はautoとなります。
算出値がautoの場合、visibilityがvisibleならalwaysと同等、それ以外ならneverと同等になります。
注記: none値は選択要素の子孫によって上書きできませんが、auto値はneverまたはalwaysで上書き可能です。
- never
-
この値は要素(ポーズ、キュー、レスト、実際の内容も含む)がレンダリングされないことを意味します(つまり、音声次元では効果がありません)。
注記: この値が設定された要素の子孫は値を上書きできるため、下位要素が音声レンダリングに参加することが可能です。 ただし、親要素のポーズ・キュー・レストは音声次元で“無効化”されるため、ポーズの折りたたみや隣接レストの加算動作には寄与しません。
- always
-
要素は音声でレンダリングされます(display値や親のdisplayやspeak値に関係なく)。
注記: この値を使うと、視覚的には描画されない要素も音声次元でレンダリングされる場合があります。
7.2. speak-as プロパティ
名前: | speak-as |
---|---|
値: | normal | spell-out || digits || [ literal-punctuation | no-punctuation ] |
初期値: | normal |
適用対象: | すべての要素 |
継承: | yes |
パーセント値: | N/A |
算出値: | 指定値 |
正規順序: | 文法どおり |
speak-asプロパティは、あらかじめ定義された選択肢に基づいて、テキストをどのように音声でレンダリングするかを決定します。
注記: このプロパティの機能は、SSMLマークアップ言語のsay-as
要素([SSML]、値は[SSML-SAYAS] W3C
Note参照)と概念的に類似していますが、CSSモデルは基本的な発音規則に限定されています。
- normal
- 要素の内容を言語依存の発音規則でレンダリングします。 例えば、句読点はそのまま読み上げるのではなく、自然な間としてレンダリングされます。
- spell-out
- テキストを1文字ずつスペルアウトします(頭字語や略語に便利)。 アクセント付き文字がまれな言語では、アクセントを省略して代替スペルで表示することが許可されています。 例として、英語では“rôle”は“role”とも書けます。準拠実装なら“rôle”を“R O L E”とスペルアウトできます。
- digits
-
数字を1桁ずつ話します。
例えば、“twelve”は“one two”、“31”は“three one”と読み上げられます。
注記: 音声合成エンジンは数字を認識できます。 speak-asプロパティで、ユーザーエージェントが数字をどう読み上げるかある程度制御でき、実際の音声合成前の前処理ステップとして実装可能です。
- literal-punctuation
- セミコロンや中括弧などの句読点を、そのまま名称で読み上げます(自然な間としてではなく文字通り読み上げ)。
- no-punctuation
- 句読点はレンダリングされません。読み上げも間も入りません。
8. ポーズプロパティ
8.1. pause-before および pause-after プロパティ
名前: | pause-before, pause-after |
---|---|
値: | <time> | none | x-weak | weak | medium | strong | x-strong |
初期値: | none |
適用対象: | すべての要素 |
継承: | no |
パーセント値: | N/A |
算出値: | 指定値 |
正規順序: | 文法どおり |
pause-beforeおよびpause-after プロパティは、音声合成で要素を読み上げる前(または後)、あるいはcue-before(またはcue-after)が指定されている場合はそのキューの前(または後)に、特定の時間の無音(プロソディ境界)を指定します。この無音はオーラルボックスモデル内で発生します。
注記 このプロパティの機能はSSMLマークアップ言語のbreak
要素([SSML])と似ていますが、CSS Speechのpauseによるプロソディ境界の適用には特別な配慮(例:“ポーズの折りたたみ”)が必要です。
- <time>
- ポーズを絶対的な時間単位(秒、ミリ秒、例: "+3s", "250ms")で表します。非負値のみ許可されます。
- none
- 0msと同等(音声処理器がプロソディ区切りを生成しません)。
- x-weak, weak, medium, strong, and x-strong
- ポーズを音声出力のプロソディ区切りの強さで表します。正確な時間は実装依存です。 これらの値は、要素間で単調非減少(概念的には増加)する区切りの強さを示します。
注記: 強い内容の区切りには通常ポーズが伴います。 例えば、段落間の区切りは、文内の単語間の区切りよりもはるかに長いのが一般的です。
p { pause: none } /* pause-before: none; pause-after: none */
8.2. pause ショートハンドプロパティ
名前: | pause |
---|---|
値: | <'pause-before'> <'pause-after'>? |
初期値: | N/A(個々のプロパティを参照) |
適用対象: | すべての要素 |
継承: | no |
パーセント値: | N/A |
算出値: | N/A(個々のプロパティを参照) |
正規順序: | 文法どおり |
pauseプロパティは、pause-before および pause-after のショートハンドプロパティです。 2つの値を指定した場合、1つ目の値はpause-before、2つ目の値はpause-afterとなります。 1つだけ指定した場合は、両方のプロパティに適用されます。
プロパティ値の例:
h1 { pause: 20ms; } /* pause-before: 20ms; pause-after: 20ms */ h2 { pause: 30ms 40ms; } /* pause-before: 30ms; pause-after: 40ms */ h3 { pause-after: 10ms; } /* pause-before: 未指定; pause-after: 10ms */
8.3. ポーズの折りたたみ
pauseは、オーラル「ボックス」とその前後のオーラル「ボックス」との最小距離を定義します。 隣接するpauseは、最も強い名前付き区切りと最長の絶対時間を選択してマージされます。 例えば、「strong」と「weak」をマージする際は「strong」が、「1s」と「250ms」をマージする際は「1s」が選ばれます。 「strong」と「250ms」をマージした場合は両方が加算的に有効となります。
次のpauseが隣接とみなされます:
- オーラル「ボックス」のpause-afterと、その最後の子のpause-after。 ただし、前者にrest-afterやcue-afterがない場合。
- オーラル「ボックス」のpause-beforeと、その最初の子のpause-before。 ただし、前者にrest-beforeやcue-beforeがない場合。
- オーラル「ボックス」のpause-afterと、次の兄弟要素のpause-before。
- オーラル「ボックス」のpause-beforeとpause-after。 ただし、「ボックス」のvoice-durationが"0ms"であり、rest-beforeやrest-after、cue-beforeやcue-afterがない場合、 または「ボックス」に全くレンダリングされる内容がない場合(speak参照)。
折りたたまれたpauseは、構成するpauseのいずれかが他のpauseと隣接している場合、そのpauseとも隣接しているとみなされます。
注: pauseは、要素内容とcueの間からcueの外側に移動しました。 これはCSS2.1オーラル付録(参考)[CSS2]との後方互換性はありません。
9. レストプロパティ
9.1. rest-before および rest-after プロパティ
名前: | rest-before, rest-after |
---|---|
値: | <time> | none | x-weak | weak | medium | strong | x-strong |
初期値: | none |
適用対象: | すべての要素 |
継承: | no |
パーセント値: | N/A |
算出値: | 指定値 |
正規順序: | 文法どおり |
rest-before および rest-after プロパティは、オーラルボックスモデル内での要素を音声合成でレンダリングする前(または後)に発生する、特定の時間の無音(プロソディ境界)を指定します。
注記: このプロパティの機能は、SSMLマークアップ言語のbreak
要素([SSML])と似ていますが、CSS Speechのrestによるプロソディ境界の適用には特別な配慮(例:途中に挿入されるオーディオキュー、隣接レストの加算動作)が必要です。
- <time>
- レストを絶対的な時間単位(秒、ミリ秒、例: "+3s", "250ms")で表現します。非負値のみ許可されます。
- none
- 0msと同等(音声処理器がプロソディ区切りを生成しません)。
- x-weak, weak, medium, strong, and x-strong
- レストを音声出力のプロソディ区切りの強さで表現します。正確な時間は実装依存です。 これらの値は、要素間で単調非減少(概念的には増加)する区切りの強さを示します。
ポーズプロパティとは異なり、レストは要素の内容とcue-beforeまたはcue-afterコンテンツとの間に挿入されます。 隣接するrestは加算的に扱われ、折りたたまれることはありません。
9.2. rest ショートハンドプロパティ
名前: | rest |
---|---|
値: | <'rest-before'> <'rest-after'>? |
初期値: | N/A(個々のプロパティを参照) |
適用対象: | すべての要素 |
継承: | no |
パーセント値: | N/A |
算出値: | N/A(個々のプロパティを参照) |
正規順序: | 文法どおり |
restプロパティは、rest-before および rest-after のショートハンドです。 2つの値を指定した場合、1つ目の値はrest-before、2つ目の値はrest-afterとなります。 1つだけ指定した場合は、両方のプロパティに適用されます。
10. キュープロパティ
10.1. cue-before および cue-after プロパティ
名前: | cue-before, cue-after |
---|---|
値: | <uri> <decibel>? | none |
初期値: | none |
適用対象: | すべての要素 |
継承: | no |
パーセント値: | N/A |
算出値: | 指定値 |
正規順序: | 文法どおり |
cue-before および cue-after プロパティは、オーラルボックスモデル内で要素の前後に再生される聴覚アイコン(あらかじめ録音・生成されたサウンドクリップ)を指定します。
注記: このプロパティの機能は、SSMLマークアップ言語のaudio
要素と関連があるように見えるかもしれませんが、実際には大きな違いがあります。
例えば、オーラルボックスモデルにより、オーディオキューは要素の音量レベルに関連付けられます。
また、CSS Speechの聴覚アイコンは、SSMLのaudio
要素と比べ機能が限定されています。
- <uri>
- URIは聴覚アイコンリソースを指定します。 ユーザーエージェントが指定された聴覚アイコンを再生できない場合(例:ファイルリソースの欠落や非対応のオーディオコーデック)には、ベル音などの代替キューを生成することが推奨されます。
- none
- 聴覚アイコンを使用しないことを指定します。
- <decibel>
-
選択要素のvoice-volumeプロパティの算出値に対する相対的な変化(正または負)を表します(オーラルボックスモデル内)。
(そのため、voice-volumeプロパティが変化するとオーディオキューの音量も変化します)。
省略時は暗黙的に0dBに算出されます。
選択要素のvoice-volumeプロパティの算出値がsilentの場合、 オーディオキューもsilentになります(この<decibel>値に関係なく)。 それ以外(silentでない場合)、voice-volume値は常に音量レベルキーワード(voice-volume参照)に対して相対的に指定され、これらはユーザー校正済みの「好みの」音量設定にマッピングされます。 継承したvoice-volume値にすでにデシベルオフセットが含まれている場合、オーディオキュー固有のdBオフセットは加算されます。
注記: 音量がsilentのオーディオキューと、値がnoneのものには違いがあります。 前者は再生された場合と同じ時間だけ時間を占有しますが、音は発生しません。 後者はオーディオキュー自体が存在せず(オーラル次元でキュー用の時間も割り当てなし)、何も発生しません。
プロパティ値の例:
a { cue-before: url(/audio/bell.aiff) -3dB; cue-after: url(dong.wav); } h1 { cue-before: url(../clips-1/pop.au) +6dB; cue-after: url(../clips-2/pop.au) 6dB; } div.caution { cue-before: url(./audio/caution.wav) +8dB; }
10.2. オーディオキューと音声合成音量レベルの関係
このセクションは規範的でありません。
選択要素のオーラルボックスモデル内では、オーディオキューと音声合成の音量レベルが関連しています。 例えば、音量レベルが+0dB(<decibel>値で指定)に設定されたオーディオキューの望ましい効果は、再生時の知覚される大きさが選択要素の音声合成の音量と近くなることであり、それはvoice-volumeプロパティの算出値により決まります。 voice-volumeプロパティの算出値がsilentの場合、オーディオキューも強制的に無音化されます(指定されたオーディオキュー<decibel>値に関係なく)。
voice-volumeプロパティの音量キーワードは、著者が知り得ない要求(例:聴取環境、個人の好み)に合わせてユーザーが校正します。 このため、オーディオキューと音声合成の音量をおおよそ揃えるには、著者はオーディオキューの音量レベルが(平均的に、ストリーム内の抑揚やストレス等で知覚音量が変化する場合も含めて)voice-familyに基づく音声合成出力と一致するようにすべきです。 典型的な聴取条件(デフォルトシステム音量、周波数スペクトル全体のイコライザーがフラット等)を想定します。 音声処理器は生成されるTTSオーディオの波形振幅を直接制御できますし、ユーザーエージェントはオーディオキューの出力音量も(デジタル音声クリップの波形振幅に基づき)増幅・減衰できます。 これにより、ユーザー校正済み音量レベルに対してTTSとキューオーディオストリームの両方の音量を管理する基準が作られます(voice-volumeプロパティで定義されたキーワードを参照)。
知覚される音響特性(例:音量)とデジタル音声信号への処理(例:信号圧縮)の複雑な関係のため、単純なシナリオとして、減衰量がデシベルで示される場合を挙げます。 これは通常0dB(最大入力、クリッピング閾値近辺)から-60dB(完全な無音)までです。 この前提下で「標準的」なオーディオクリップはこれらの値の間を揺れ動き、最大ピークレベルは歪みを避けるため-3dB近く、主要な可聴部分はできるだけ高い(静かすぎて増幅時にノイズが入るのを避けるため)。 これにより、事前録音音声から合成音声への切り替え時にも音量差を感じさせない、シームレスなオーディオ体験が得られます。 このような業界標準は存在しませんが、TTSエンジン各種はゲインや減衰指定がない場合、おおむね同等の大きさの信号を生成します。 ボイスやソフト音楽の場合、-15dB RMSが標準的なようです。
10.3. cue ショートハンドプロパティ
名前: | cue |
---|---|
値: | <'cue-before'> <'cue-after'>? |
初期値: | N/A(個々のプロパティを参照) |
適用対象: | すべての要素 |
継承: | no |
パーセント値: | N/A |
算出値: | N/A(個々のプロパティを参照) |
正規順序: | 文法どおり |
cue プロパティは、cue-before および cue-after のショートハンドです。 2つ値を指定した場合、1つ目がcue-before、2つ目がcue-afterです。 1つだけ指定した場合は両方のプロパティに適用されます。
ショートハンド記法の例:
h1 { cue-before: url(pop.au); cue-after: url(pop.au); } /* ...は次のように書けます: */ h1 { cue: url(pop.au); }
11. 音声特性プロパティ
11.1. voice-family プロパティ
名前: | voice-family |
---|---|
値: | [[<family-name> | <generic-voice>],]* [<family-name> | <generic-voice>] | preserve |
初期値: | 実装依存 |
適用対象: | すべての要素 |
継承: | yes |
パーセント値: | N/A |
算出値: | 指定値 |
正規順序: | 文法どおり |
voice-family プロパティは、カンマで区切られた優先順位付きの値リストを指定します(これは代替候補であることを示します)。 (これはビジュアルスタイルシートにおける font-family と類似しています。) 各コンポーネント値は、マッチ条件を指定することで音声合成のボイスインスタンスを示す場合があります。 詳細は ボイス選択 セクションを参照してください。
<generic-voice> = [<age>? <gender> <integer>?]
注記: このプロパティの機能は、SSMLマークアップ言語のvoice
要素([SSML])と似ていますが、CSS
SpeechはSSMLの高度なボイス言語選択と同等の機能は提供しません。
この技術的制限は将来のSpeechモジュール改訂で緩和される可能性があります。
- <family-name>
-
値は特定のボイスインスタンス(例:Mike、comedian、mary、carlos2、"valley girl")です。
font-family名と同様に、ボイス名は文字列として引用符で囲むか、引用符なしで1つ以上のCSS識別子の連続として記述します。
注記: その結果、多くの句読点や、各トークンの先頭の数字は引用符なしの場合はエスケープが必要です。
ボイス名として識別子の連続が指定された場合、算出値はそれらを半角スペースで連結した文字列となります。
ボイス名がジェンダーキーワード(male, female, neutral)や、CSS全体キーワード、preserveと一致する場合は、これらのキーワードと区別するため引用符で囲む必要があります。 defaultキーワードも将来のために予約されており、ボイス名として使う場合は引用符で囲む必要があります。
注記: [SSML]では、ボイス名はスペース区切りでホワイトスペースを含めることはできません。
ボイス名に空白、数字、ハイフン以外の句読点が含まれる場合は、(引用符なしでも有効であっても)可読性向上のため引用符で囲むことを推奨します。 例:
voice-family: "john doe", "Henry the-8th";
- <age>
-
値にはchild、young、oldがあり、ボイス選択時に優先する年齢カテゴリを示します。
注記: [SSML]の年齢との推奨対応関係は、child = 6歳、young = 24歳、old = 75歳。 より柔軟な年齢範囲はプロセッサ依存のボイスマッチアルゴリズムで使われる場合があります。
- <gender>
-
male、female、neutral のいずれかのキーワードで、それぞれ男性、女性、中性の声を指定します。
注記: 年齢や性別と認識可能な声タイプとの関係は、文化的・言語的・生物学的など多数の要素に依存するため、普遍的に定義できません。 本仕様の機能は様々な音声コンテキストに合理的に適用できる簡易モデルを提供するものであり、一定の近似を伴います。 将来の仕様では音声マッチアルゴリズムの精度がさらに洗練される可能性があります。
- <integer>
- 優先するバリアント(例:「2番目の男性子供声」など)を示す整数。正の整数(ゼロを除く)のみ使用可能です。 1はマッチしたボイスのうち最初のものを指します。
- preserve
- voice-family値が、コンテンツマークアップ内で言語が変わっても継承・使用されることを示します (下のボイス選択および言語処理の説明を参照)。 この値はルート要素に適用した場合はinheritと同様に動作します。 注記: 要素の子孫は、他のvoice-family値(例:名前、性別、年齢)で明示的に上書きされない限り自動的にpreserve値を継承します。
無効な宣言の例:
voice-family: john/doe; /* スラッシュはエスケープが必要 */ voice-family: john "doe"; /* 識別子列には文字列を含められない */ voice-family: john!; /* 感嘆符はエスケープが必要 */ voice-family: john@doe; /* "@"記号はエスケープが必要 */ voice-family: #john; /* 識別子は#で始められない */ voice-family: john 1st; /* 識別子は数字で始められない */
11.1.1. ボイス選択・コンテンツ言語
voice-family プロパティは音声合成のボイスインスタンス選択をガイドするために使われます。 この選択プロセスの一部として、音声対応ユーザーエージェントはマークアップ内で選択要素の言語も考慮しなければなりません。 「name」「gender」「age」および優先「variant」(インデックス)は、voice-family値が子孫要素に継承される中で、コンテンツ階層下に伝播するボイス選択ヒントです。 コンテンツ構造内のどの地点でも、言語は指定CSS音声特性よりも優先されます(高い優先度を持ちます)。
以下はボイス選択アルゴリズムの概要です (「言語」は方言なども含む緩やかな定義として扱います):
- 選択コンテンツの言語に対して利用可能なボイスインスタンスが1つだけの場合は、指定されたCSS音声特性に関係なくそのボイスを使用しなければなりません。
- 選択コンテンツの言語に対して複数のボイスインスタンスがある場合、指定された名前や性別・年齢・優先バリアントに最も近いものを選びます。 「最適一致」の定義はプロセッサ依存です。 例えば、システムに男性と女性の大人の声しかない場合、「voice-family: young male」は高めの女性声がマッチするかもしれません(この声色が少年に近いため)。 いずれのvoice-familyコンポーネント値でも特性が一致しない場合は、その言語に適した利用可能なボイスインスタンスのうち最初のものを使用しなければなりません。
- 選択コンテンツの言語に利用可能なボイスがない場合は、ユーザーエージェントは適切なTTS音声がないことをユーザーに通知するのが推奨されます。
CSS音声特性がコンテンツ内で変化した場合は、音声合成ボイスを再評価(再選択)しなければなりません。 また、コンテンツ言語が変化した場合も再計算が必要ですが、preserveキーワードが使われている場合はこの限りではありません (これは埋め込みの外国語テキストを本来の言語に対応しない声で読み上げたい場合などに有用です。下記例参照)。
注記: ボイスを動的に決定することで予期しない遅延が発生する場合があるため、ユーザーエージェントは再生開始前に文書ツリー内で具体的なボイスインスタンスを解決するよう努めるべきです。
プロパティ値例:
h1 { voice-family: announcer, old male; } p.romeo { voice-family: romeo, young male; } p.juliet { voice-family: juliet, young female; } p.mercutio { voice-family: young male; } p.tybalt { voice-family: young male; } p.nurse { voice-family: amelie; } ... <p class="romeo" xml:lang="en-US"> The French text below will be spoken with an English voice: <span style="voice-family: preserve;" xml:lang="fr-FR">Bonjour monsieur !</span> The English text below will be spoken with a voice different than that corresponding to the class "romeo" (which is inherited from the "p" parent element): <span style="voice-family: female;">Hello sir!</span> </p>
11.2. voice-rate プロパティ
名前: | voice-rate |
---|---|
値: | [normal | x-slow | slow | medium | fast | x-fast] || <percentage> |
初期値: | normal |
適用対象: | すべての要素 |
継承: | yes |
パーセント値: | デフォルト値に対する相対値 |
算出値: | キーワード値、および(100%でない場合は)そのキーワードに対するパーセンテージ |
正規順序: | 文法どおり |
voice-rate プロパティは、合成音声の生成速度(単位:1分間の単語数)を操作します。
注記: このプロパティの機能は、SSMLマークアップ言語のprosody
要素のrate
属性([SSML])と似ていますが、明確な違いもあります。
例えば、CSS Speechの速度キーワードとパーセンテージ修飾子は、選択要素で値が継承・組み合わせられる方法により、相互排他的ではありません。
- normal
- 現在アクティブなボイスで音声合成器が生成するデフォルト速度を表します。 これはプロセッサ依存で、言語や方言、声の「個性」によって決まります。
- x-slow, slow, medium, fast, x-fast
- 実装とボイス固有の、単調非減少な発話速度の系列です。 例えば英語の典型値(単語/分)は、x-slow=80、slow=120、medium=180~200、fast=500 などです。
- <percentage>
-
非負のパーセンテージ値のみ許可されます。 これは上記キーワード値、またはルート要素のデフォルト値、あるいは継承された発話速度(それ自体がキーワード値+パーセンテージの組み合わせである場合はパーセンテージ値を乗算)に対する相対変化を表します。 例:50%は速度を0.5倍にします。100%以上はより速く、100%未満はより遅くなります。
継承値の例:
<body> <e1> <e2> <e3> ... </e3> </e2> </e1> </body> body { voice-rate: inherit; } /* 初期値は 'normal' (実際の発話速度値は アクティブなボイスに依存) */ e1 { voice-rate: +50%; } /* 算出値は ['normal' と 50%] で、'normal'の速度の0.5倍になる */ e2 { voice-rate: fast 120%; } /* 算出値は ['fast' と 120%] で、'fast'の速度の1.2倍になる */ e3 { voice-rate: normal; /* 発話速度をボイスの固有値に"リセット"、 算出値は 'normal'(実際値は下記コメント参照) */ voice-family: "another-voice"; } /* ボイスが異なるため 算出 'voice-rate' 値が同じでも "body"とは異なる計算速度になる場合がある */
11.3. voice-pitch プロパティ
名前: | voice-pitch |
---|---|
値: | <frequency> && absolute | [[x-low | low | medium | high | x-high] || [<frequency> | <semitones> | <percentage>]] |
初期値: | medium |
適用対象: | すべての要素 |
継承: | yes |
パーセント値: | 継承された値を参照 |
算出値: | キーワードのみ指定された場合は定義済みピッチキーワードのいずれか、それ以外は現在のvoice-familyに基づきキーワード値を固定周波数に変換し、指定された相対オフセット(存在する場合)を適用した絶対周波数 |
正規順序: | 文法どおり |
voice-pitch プロパティは生成される音声出力の「基準」ピッチを指定します。 これは使用されているvoice-familyインスタンスに依存し、音声合成エンジンによって異なります (おおよそ出力の平均的なピッチに相当します)。 例えば、男性の声の一般的なピッチは約120Hz、女性の声は約210Hzです。
注記: このプロパティの機能は、SSMLマークアップ言語prosody
要素のpitch
属性([SSML])と似ていますが、明確な違いもあります。
例えば、CSS Speechのピッチキーワードと相対変化(周波数、セミトーン、パーセンテージ)は、選択要素で値が継承・組み合わせられる方法により、相互排他的ではありません。
- <frequency>
- 周波数単位(HzまたはkHz、例:100Hz、+2kHz)での値。 absoluteキーワードが指定された場合は正の数に制限されます。 それ以外(absoluteキーワードが指定されていない場合)は、 負の値は減少、正の値は増加を表し、継承値に対する相対量です。 例:2kHzは正のオフセット(+2kHzと同じ)、 +2kHz absoluteは絶対周波数(2kHz absoluteと同じ)。
- absolute
- 指定された場合、このキーワードは指定した周波数が絶対値であることを示します。 負の周波数が指定された場合、算出周波数は0になります。
- <semitones>
- 継承値に対する相対変化(増減)を指定します。 <semitones>の値の構文は、 単位識別子st(セミトーン)を持つ次元です。 セミトーン間隔は、平均律クロマチックスケール上の各音の間隔に相当します。 セミトーンは このようなスケール上で2つの連続するピッチ周波数の差として定量化できます。 セミトーンで区切られた2つの周波数比は2の12乗根(約11011/10393、正確に1.0594631)です。 したがって、セミトーンオフセットに対応するHz値は、そのオフセットが適用される基準周波数に依存します。 (言い換えれば、セミトーンはHzで一定の数値にはなりません。)
- <percentage>
- 正負両方のパーセント値が許可されており、継承値に対する増加または減少(それぞれ)を表します。
算出値は、指定された割合分だけ継承値に加算(または減算)した結果です。
例:継承値が200Hzのとき50%(+50%と同じ)は
200 + (200*0.5)
= 300Hz。 逆に-50%は200-(200*0.5)
= 100Hz。 - x-low, low, medium, high, x-high
- 単調非減少なピッチレベルの系列で、実装およびボイス固有です。 特定要素の算出値がキーワードのみの場合(相対オフセットが指定されていない場合)、 ボイスが変わると対応する絶対周波数が再評価されます。 逆に相対オフセットを適用した場合は、その時点のボイスに基づいて計算した周波数が下流でも絶対的に継承されます。 したがって、ボイス変更時にキーワードから具体的なボイス依存周波数への変換を再評価したい場合のみキーワード値を使うべきです。
算出された絶対周波数が負の場合は0Hzに丸められます。 音声対応ユーザーエージェントは、計算上可能な全周波数範囲よりも、実際には特定の範囲のみサポートする可能性が高いです。 したがって、実際の値は実装依存の最小・最大値に丸められる場合があります。 例:0Hzの周波数は正当な計算結果となり得ますが、音声合成エンジンの文脈ではより意味のある値に丸められる場合があります。
プロパティ値の例:
h1 { voice-pitch: 250Hz; } /* 継承された絶対周波数に対する正のオフセット */ h1 { voice-pitch: +250Hz; } /* 上の行と同一 */ h2 { voice-pitch: +30Hz absolute; } /* インクリメントではない */ h2 { voice-pitch: absolute 30Hz; } /* 上の行と同一 */ h3 { voice-pitch: -20Hz; } /* 継承された絶対周波数に対する負のオフセット(減少) */ h4 { voice-pitch: -20Hz absolute; } /* 不正な構文 => 値は無視される(absoluteキーワードは負の周波数と併用不可) */ h5 { voice-pitch: -3.5st; } /* セミトーン、負のオフセット */ h6 { voice-pitch: 25%; } /* 継承値の4分の1を加える、という意味 */ h6 { voice-pitch: +25%; } /* 上の行と同一 */
11.4. voice-range プロパティ
名前: | voice-range |
---|---|
値: | <frequency> && absolute | [[x-low | low | medium | high | x-high] || [<frequency> | <semitones> | <percentage>]] |
初期値: | medium |
適用対象: | すべての要素 |
継承: | yes |
パーセント値: | 継承された値を参照 |
算出値: | キーワードのみ指定された場合は定義済みピッチキーワードのいずれか、それ以外は現在のvoice-familyに基づきキーワード値を固定周波数に変換し、指定された相対オフセット(存在する場合)を適用した絶対周波数 |
正規順序: | 文法どおり |
voice-range プロパティは「基準」ピッチの可変幅、すなわち基本周波数が音声出力の平均ピッチからどれだけずれるかを指定します。 生成される音声のダイナミックなピッチ幅は、活発な発話(抑揚や強調による意味伝達など)で一般的に広くなります。 通常、範囲が狭いと平坦で単調な声になり、範囲が広いと表現豊かな声になります。
注記: このプロパティの機能は、SSMLマークアップ言語prosody
要素のrange
属性([SSML])と似ていますが、明確な違いもあります。
例えば、CSS Speechのピッチレンジキーワードと相対変化(周波数、セミトーン、パーセンテージ)は、選択要素で値が継承・組み合わせられる方法により、相互排他的ではありません。
- <frequency>
- 周波数単位(HzまたはkHz、例:100Hz、+2kHz)での値。 absoluteキーワードが指定された場合は正の数に制限されます。 それ以外(absoluteキーワードが指定されていない場合)は、 負の値は減少、正の値は増加を表し、継承値に対する相対量です。 例:2kHzは正のオフセット(+2kHzと同じ)、 +2kHz absoluteは絶対周波数(2kHz absoluteと同じ)。
- absolute
- 指定された場合、このキーワードは指定した周波数が絶対値であることを示します。 負の周波数が指定された場合、算出周波数は0になります。
- <semitones>
- 継承値に対する相対変化(増減)をセミトーン単位で指定します。
- <percentage>
- 正負両方のパーセント値は継承値に対する増加または減少(それぞれ)を表します。
算出値は、指定された割合分だけ継承値に加算(または減算)した結果です。
例:継承値が200Hzのとき50%(+50%と同じ)は
200 + (200*0.5)
= 300Hz。 逆に-50%は200-(200*0.5)
= 100Hz。 - x-low, low, medium, high, x-high
- 単調非減少なピッチレベルの系列で、実装およびボイス固有です。 特定要素の算出値がキーワードのみの場合(相対オフセットが指定されていない場合)、 ボイスが変わると対応する絶対周波数が再評価されます。 逆に相対オフセットを適用した場合は、その時点のボイスに基づいて計算した周波数が下流でも絶対的に継承されます。 したがって、ボイス変更時にキーワードから具体的なボイス依存周波数への変換を再評価したい場合のみキーワード値を使うべきです。
算出された絶対周波数が負の場合は0Hzに丸められます。 音声対応ユーザーエージェントは、計算上可能な全周波数範囲よりも、実際には特定の範囲のみサポートする可能性が高いです。 したがって、実際の値は実装依存の最小・最大値に丸められる場合があります。 例:0Hzの周波数は正当な計算結果となり得ますが、音声合成エンジンの文脈ではより意味のある値に丸められることがあります。
継承値の例:
<body> <e1> <e2> <e3> <e4> <e5> <e6> ... </e6> </e5> </e4> </e3> </e2> </e1> </body> body { voice-range: inherit; } /* 初期値は'medium' (実際の周波数値は 現在のボイスによって決まる) */ e1 { voice-range: +25%; } /* 算出値は ['medium' + 25%] で、'medium'に相当する周波数 に'0.25倍'を加えた値 */ e2 { voice-range: +10Hz; } /* 算出値は [FREQ + 10Hz] で、"FREQ"は上記"e1"ルールで計算された絶対周波数 */ e3 { voice-range: inherit; /* これは省略可能だが、 明示的に記載している */ voice-family: "another-voice"; } /* このボイス変更により "body"要素から継承した'medium'キーワードの 初期値再評価が発生するはずだが、 相対オフセットがスタイルカスケード下流に適用されたため、 継承値は実際には上記"e2"ルールで計算された周波数 */ e4 { voice-range: 200Hz absolute; } /* 絶対周波数で上書き(現在のボイスに依存しない) */ e5 { voice-range: 2st; } /* 算出値は絶対周波数で、 計算内容: 200Hz + 2セミトーン (注意:セミトーンに対応する実際の周波数は基準値による) */ e6 { voice-range: inherit; /* これは省略可能だが、 明示的に記載している */ voice-family: "yet-another-voice"; } /* ボイスが変わっても 算出値は"e5"と同じ(絶対周波数値であり、 現在のボイスに依存しない) */
11.5. voice-stress プロパティ
名前: | voice-stress |
---|---|
値: | normal | strong | moderate | none | reduced |
初期値: | normal |
適用対象: | すべての要素 |
継承: | yes |
パーセント値: | N/A |
算出値: | 指定値 |
正規順序: | 文法どおり |
voice-stress プロパティは強調の強さを操作します。これは通常、ピッチの変化、タイミングの変化、音量、その他の音響的な違いの組み合わせで適用されます。 値の正確な意味は、話される言語によって異なります。
注記: このプロパティの機能は、SSMLマークアップ言語のemphasis
要素に類似しています([SSML])。
- normal
- 音声合成エンジンが生成するデフォルトの強調を表します。
- none
-
合成エンジンが通常強調するテキストを強調しないようにします。
- moderate および strong
- これらの値は強さが単調に増加する値です。 適用すると、音声合成エンジンが通常生成するものよりも強い強調となります(つまり、normal値よりも強い)。
- reduced
- 単語の強調を実質的に弱める(反対の効果)。
プロパティ値の例(HTMLサンプル付き):
.default-emphasis { voice-stress: normal; } .lowered-emphasis { voice-stress: reduced; } .removed-emphasis { voice-stress: none; } .normal-emphasis { voice-stress: moderate; } .huge-emphasis { voice-stress: strong; } ... <p>これは大きな車です。</p> <!-- 上の行の音声出力は下の行と同じ: --> <p>これは <em class="default-emphasis">大きな</em> 車です。</p> <p>この車は <em class="lowered-emphasis">巨大</em> です!</p> <!-- 下のem要素は完全に強調されません。上の行は強調が弱められています: --> <p>この車は <em class="removed-emphasis">巨大</em> です!</p> <!-- 以下は強調の度合いを増やした例: --> <p>これは <em class="normal-emphasis">大きな</em> 車です!</p> <p>これは <em class="huge-emphasis">大きな</em> 車です!!!</p>
12. 音声継続時間プロパティ
12.1. voice-duration プロパティ
名前: | voice-duration |
---|---|
値: | auto | <time> |
初期値: | auto |
適用対象: | すべての要素 |
継承: | no |
パーセント値: | N/A |
算出値: | 指定値 |
正規順序: | 文法どおり |
voice-duration プロパティは、選択された要素の内容をレンダリングするのにかかる時間を指定します (オーディオキュー、ポーズ、休止は含みません)。 auto の値が指定されていない限り、 このプロパティは voice-rate プロパティよりも優先され、 ボイスの適切な話速を決定するために使用されるべきです。 voice-duration プロパティの値が auto でない要素は、 voice-duration および voice-rate プロパティが指定された子孫を持つことができますが、 これらは無視されなければなりません。 つまり、選択された要素の <time> に voice-duration が指定された場合、 その値は要素全体のサブツリーに適用され(子要素はこのプロパティを上書きできません)。
注: このプロパティが提供する機能は、
SSMLマークアップ言語の prosody
要素の
duration
属性
[SSML] と類似しています。
- auto
- 継承されたvoice-rateを使用して音声合成したときの継続時間に対応する使用値となります。
- <time>
- 絶対時間単位(秒、ミリ秒、例: "+3s", "250ms")で値を指定します。非負値のみ許可されます。
13. リスト項目とカウンタースタイル
list-style-typeプロパティ([CSS2])は、 リスト項目マーカーのタイプとして、グリフ、番号体系、アルファベット体系の3種類を指定できます。 このプロパティで許可される値は、contentプロパティのcounter()関数にも利用されます。 CSS Speechモジュールは、これらのスタイルを音声次元で音声合成を用いてどのようにレンダリングするかを定義します。 list-style-imageプロパティ([CSS2])は無視され、 代わりにlist-style-typeが使用されます。
注記: CSS Lists and Counters Module Level 3 [CSS3LIST]の新機能の音声レンダリングは、このCSS Speechのレベルではカバーされていませんが、将来の仕様で定義される可能性があります。
- disc, circle, square
- これらのリスト項目スタイルの場合、ユーザーエージェントは(ユーザー設定に基づく場合も含めて)どのフレーズを話すか、あるいはどのオーディオキューを再生するかを定義します。 図形記号付きのリスト項目は、実装依存の方法で適切にアナウンスされます。
- decimal, decimal-leading-zero, lower-roman, upper-roman, georgian, armenian
- これらのリスト項目スタイルの場合、対応する数字がそのまま音声合成エンジンで読み上げられ、リスト項目が存在することを示すために追加のオーディオキューや音声フレーズ(文書の言語で、リスト項目内容と同じTTSボイスで)を補うことができます。 例えば英語の場合、リスト項目カウンターの前に「Item」という単語を付ければ、「Item one」「Item two」などと読み上げられます。
- lower-latin, lower-alpha, upper-latin, upper-alpha, lower-greek
- これらのリスト項目スタイルは、ドキュメントの言語(リスト項目内容と同じTTSボイス)で1文字ずつスペルアウトされます。 例えば、英語のlower-greekは「アルファ」「ベータ」「ガンマ」などと読み上げられます。 同様に、フランス語のupper-latinは/a/、/be/、/se/など(音声表記)で読み上げられます。
注記: スクリーンリーダーなどのユーザーエージェントはリスト項目のネスト深度を読み上げたり、より一般的には複雑な階層コンテンツの追加構造情報を通知したりすることがよくあります。 これらの追加音声キューや音声出力の冗長さは通常ユーザーが調整可能で、ユーザビリティの向上に寄与します。 これらのナビゲーション補助は実装依存ですが、CSS Speechモジュールをサポートするユーザーエージェントは、これらの追加音声キューや音声出力が冗長性や不整合(例:リスト項目番号付け方式の重複や相違)を生まないようにすべきです。
14. 挿入および置換コンテンツ
このセクションは規範的でありません。
時には、著者が通常の発音規則を適用する前にソーステキストから別の文字列へのマッピングを指定したい場合があります。
これは音声合成エンジンによって認識されにくい略語や頭字語などに使われます。
content
プロパティを利用すると、ある文字列を別の文字列に置換できます。
このプロパティの機能は、SSMLマークアップ言語のsub
要素のalias
属性([SSML])に類似しています。
/* 選択要素の内容を "World Wide Web Consortium" という文字列に置換します。 */ abbr { content: attr(title); } ... <abbr title="World Wide Web Consortium">W3C</abbr>
同様に、ドキュメント内のテキスト文字列を予め録音されているバージョンに置換できます。
.hamlet { content: url(./audio/gielgud.wav); } ... <div class="hamlet"> To be, or not to be: that is the question: </div>
さらに、著者(またはユーザーがユーザースタイルシートを通じて)は、非視覚的インタラクション時の構造理解を助ける情報を追加することもできます。 その場合、::before および ::after 疑似要素を使います。 スクリーンリーダーが読み上げる追加情報の冗長度は、異なるスタイルシートを使って定義できます。
この例では、リストの前に「リスト開始:」、各リスト項目の内容の前に「リスト項目:」、リストの後に「リスト終了:」という文字列を挿入し、リストの音声出力終了をユーザーに通知します。
ul::before { content: "リスト開始: "; } ul::after { content: "リスト終了。 "; } li::before { content: "リスト項目: "; }
詳細は CSS3 Generated and Replaced Content モジュール [CSS3GENCON] を参照してください。
15. 発音・音素
このセクションは規範的でありません。
CSSは、マークアップ文書内の特定テキストの発音(明確な音声記号で表現)を指定する方法を定めていません。 この仕様の初期ドラフトでは "phonemes" プロパティが記述されていましたが、内容と提示の分離原則に反するという反対意見がありました。 (オーラルCSSスタイルシート内で著者が "phonemes" を指定した場合、マークアップのテキストが変わるたびに更新が必要になります。) よって "phonemes" 機能はCSS(提示層)の範囲外とされ、マークアップ/コンテンツ層で扱うべきものとされています。
"pronunciation" rel
値を使うと、
link
要素で発音辞書をHTML文書にインポートできます(CSSスタイルシートを読み込むのと同様)。
W3C PLS(発音辞書仕様)[PRONUNCIATION-LEXICON]は、このような辞書を記述するために利用できるフォーマットの一つです。
さらに、マークアップ内で属性ベースの仕組みを使い、テキスト―発音の対応を記述することもできます。 本書執筆時点では、そのような仕組みはW3C HTML標準で正式には定義されていません。 しかし、EPUB 3.0仕様では、 (x)HTML5ドキュメントが[SSML]仕様由来の属性を持つことを認めており、 それにより特定の音声記号に基づくテキストの発音方法を記述できます。
用語集
このモジュールで使用される用語や略語を示します。
- UA
- ユーザーエージェント
-
ユーザーの代わりにCSSスタイルシートを読み書きするプログラムで、次のいずれかまたは両方のカテゴリに該当します:スタイルシートを解釈して文書をレンダリングするプログラム(例:ブラウザ)、スタイルシートを作成するプログラム(例:エディタ)。UAは両方に該当する場合もあります。(他にもスタイルシートを読み書きするプログラムはありますが、このモジュールでは規定しません。)
- 文書
-
要素と属性を持つ木構造のドキュメント。SGMLやXMLドキュメント[XML11]など。
- スタイルシート
付録D — 謝辞
編集者は、この仕様の作成にあたりご協力いただいたW3C Voice BrowserおよびCascading Style Sheetsワーキンググループのメンバーに感謝いたします。 特にEllen Eide(IBM)には詳細なコメント、Elika Etemad(Fantasai)には精緻なレビューをいただき、深く感謝いたします。
付録E — 変更点
以下は2012 Candidate Recommendation以降の変更点です:
- speakのnoneおよびnormal値を、明確化のためneverおよびalwaysに改名しました。 Issue 510参照。
- speakのauto値をvisibilityに応じて動作するようにしました。 Issue 511参照。
この他、いくつかの軽微な編集修正があり、ソースがBikeshed形式に変換されました。