CSSスピーチモジュール レベル1

W3C 候補勧告草案

この文書の詳細
このバージョン:
https://www.w3.org/TR/2023/CRD-css-speech-1-20230214/
最新公表バージョン:
https://www.w3.org/TR/css-speech-1/
編集者草案:
https://drafts.csswg.org/css-speech-1/
以前のバージョン:
履歴:
https://www.w3.org/standards/history/css-speech-1
実装レポート:
https://wpt.fyi/results/css/css-speech
テストスイート:
http://test.csswg.org/suites/css-speech-1_dev/nightly-unstable/
フィードバック:
CSSWG Issues Repository
編集者:
(Tetralogical)
Elika J. Etemad / fantasai (招待専門家)
以前の編集者:
(DAISY Consortium)
Claudio Santambrogio (Opera Software)
(W3C / Canon)
この仕様への編集提案:
GitHub Editor

要約

スピーチモジュールは、著者が音声合成およびオプションのオーディオキューを使用して、ドキュメントのレンダリングを宣言的に制御できるオーラルCSSプロパティを定義します。この標準はVoice Browser Activityと協力して策定されました。

CSSは、構造化されたドキュメント(HTMLやXMLなど)の画面、紙などでのレンダリングを記述するための言語です。

この文書のステータス

このセクションは、本書が公開された時点でのドキュメントのステータスについて説明します。 現在のW3C出版物の一覧およびこの技術報告書の最新版は W3C技術報告書インデックス https://www.w3.org/TR/ でご覧いただけます。

この文書はCSSワーキンググループによって 候補勧告草案として勧告トラックを使用して公開されました。 候補勧告としての公開は、W3Cおよびそのメンバーによる支持を意味するものではありません。 候補勧告草案は、ワーキンググループが次の候補勧告スナップショットに含める予定の、前回の候補勧告からの変更を統合しています。

これはドラフト文書であり、随時更新、差し替え、または他の文書により廃止される可能性があります。 この文書を進行中の作業以外のものとして引用するのは適切ではありません。

ご意見はGitHubでイシューを提出(推奨)することでお送りください。タイトルに仕様コード「css-speech」を含めてください。例: “[css-speech] …コメントの要約…”。 すべてのイシューとコメントはアーカイブされています。 また、(アーカイブあり) 公開メーリングリスト www-style@w3.org へフィードバックを送ることもできます。

この文書は2021年11月2日版W3C運用プロセス文書に準拠しています。

この文書はW3C特許ポリシーの下で運用されるグループによって作成されました。 W3Cは、グループの成果物に関連してなされた特許開示の公開リストを維持しています。 そのページには特許開示の手順も記載されています。 特許が存在し、その特許が必須請求項を含むと信じる個人は、 W3C特許ポリシー第6節に従い情報を開示する必要があります。

次の機能はリスクがあり、CR期間中に削除される可能性があります:

「リスクあり(At-risk)」はW3Cプロセスの用語であり、必ずしも機能が削除または遅延される危険があることを意味するわけではありません。 ワーキンググループが、機能が相互運用性のある実装に時間内に困難があると考えている場合にこのようにマークされます。 必要に応じ、提案勧告段階への移行時に新たな候補勧告を公開せずともこの機能を削除できるようにするものです。

1. はじめに・設計目標

このセクションは規範的でありません。

情報の音声提示は、視覚障害者や視覚に不自由のある方、印刷物を利用できない方々によく利用されています。 例えば、「スクリーンリーダー」は、視覚的インターフェースへ通常アクセスできないユーザーがそれと対話できるようにします。 また、聞くという手段が(読むことに対して)好まれる、あるいは必要とされる状況もあります。これは人の身体的な能力に関係なく起こり得ます。 例えば、車を運転中に電子書籍を再生する場合や、産業用・医療用機器の操作方法を学ぶ場合、家庭用エンターテイメントシステムと対話する場合、幼児に読み方を教える場合などです。

このSpeechモジュールで定義されるCSSプロパティにより、著者はドキュメントを音声的にどのように提示するかを宣言的に制御できます。 ドキュメントの音声レンダリングは、音声合成(「TTS」=「テキスト・トゥ・スピーチ」の略)と、聴覚アイコン(本仕様では「オーディオキュー」と呼びます)の組み合わせです。 CSS Speechプロパティは、音声のピッチや速度、音量、TTSの声などを制御する機能を提供します。 これらのスタイルシートプロパティは、視覚プロパティ(メディアの混合)と組み合わせて使うことも、視覚提示の完全な音声代替として使うこともできます。

2. 背景情報・CSS 2.1

このセクションは規範的でありません。

CSS Speechモジュールは、情報提供的な CSS2.1 オーラル付録 を再構成したものです。 そこでは aural メディアタイプが記述されていましたが、(現在は speech メディアタイプが推奨されていたものの、それも現在は廃止されています)廃止されました。 [CSS2] 仕様では speech メディアタイプが予約されていましたが、 対応するプロパティ自体は定義されていませんでした。 Speechモジュールでは、音声出力に適用されるCSSプロパティを説明し、音声次元専用の新しい「ボックス」モデルを定義しています。

コンテンツ制作者は、テキスト読み上げ合成機能を持つユーザーエージェント向けに、任意のメディアタイプ用のCSSプロパティを含めることができます。ただし、通常は allscreen でのみ意味を持ちます。 これらのスタイルは、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.

この例は、著者が音声合成エンジンにHTMLの見出しを「paul」という声で、 「moderate」(普通より強調された)ストレスで読み上げさせ、それぞれの見出しのTTSレンダリング開始前に(指定されたURLにある予め録音された音声クリップの)オーディオキューを挿入する方法を示しています。 ステレオ対応サウンドシステムでは、CSSクラス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チャンネル(ステレオ)空間と時間的次元で構成され、 その中で合成音声とオーディオキューが共存します。 選択された要素は、restcuepause プロパティで (内側から外側へ)囲まれます。 これらはそれぞれ、paddingbordermargin の音声的な対応物とみなせます。 ::before および ::after 疑似要素 [CSS2] を使うと、 要素の内容と rest の間に挿入されます。

次の図は、 ビジュアルボックスモデルとオーラルボックスモデルのプロパティの対応関係を、 選択された <element> へ適用した場合の例として示しています:

The aural 'box' model, illustrated by a diagram: the selected element is positioned in the center, on its left side are (from innermost to outermost) rest-before, cue-before, pause-before, on its right side are (from innermost to outermost) rest-after, cue-after, pause-after, where rest is conceptually similar to padding, cue is similar to border, pause is similar to margin.

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好みの音量に、 softloudは中間値にマッピングされます。
<decibel>
これは上記のキーワード値、もしくはルート要素のデフォルト値、あるいは継承された音量レベル(それ自体がキーワード値とデシベルオフセットの組み合わせである場合は、デシベル値が加算される)に対して相対的な(正または負の)変化を表します。 継承された音量レベルがsilentの場合、このvoice-volumesilentに解決されます(指定された<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-softx-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を超えたら丸め)、音を右に寄せます。

ユーザーエージェントはさまざまな種類のサウンドシステムに接続でき、音声ミキシングの能力も異なります。 モノラル、ステレオ、サラウンドシステムでの期待される動作は次のとおりです:

将来のCSS Speechモジュールでは、三次元オーディオのサポートが含まれる可能性があり、著者が「方位角」や「仰角」値を指定できるようになる見込みです。 そのため、現在の仕様で作成されたコンテンツは、将来の三次元オーディオ対応CSS Speechユーザーエージェントで再生される場合もあります。 この可能性に備え、現在のvoice-balanceプロパティで指定できる値は、「方位角」角度とも互換性を保つよう設計されています。 より具体的には、現在の左右音声軸(横方向サウンドステージ)と、リスナーの周囲360度平面とのマッピングは以下の通りです:

注記: サウンドシステムがユーザー設定により、著者が指定した左右音声分布に影響する場合があります。 一般的に、現代のサウンドシステムにあるさまざまな「サラウンド」モード(基本的なステレオスピーカーでも)では、音声信号の空間配置が大きく変化します。 三次元音場の錯覚は、位相シフト、デジタルディレイ、音量制御(チャンネルミキシング)その他技法の組み合わせで実現されることが多いです。 一部ユーザーは、すべての音声をモノラルチャンネルに「ダウングレード」することもできます。その場合、voice-balanceプロパティの効果は全く認識できません。 このように、著者が作成したコンテンツの再生忠実度はユーザーのカスタマイズに依存し、voice-balanceプロパティはあくまで望ましい結果を指定するものです。

注記: 多くの音声合成エンジンはモノラルしか生成できず、voice-balanceプロパティを本質的にはサポートしません。 左右音声軸上での分布は、合成後(音声対応ユーザーエージェントがドキュメント内の各オーディオソースをミキシングする際)に行われます。

7. スピーキングプロパティ

7.1. speak プロパティ

名前: speak
値: auto | never | always
初期値: auto
適用対象: すべての要素
継承: yes
パーセント値: N/A
算出値: 指定値
正規順序: 文法どおり

speakプロパティは、テキストを音声でレンダリングするかどうかを決定します。

注記: このプロパティの機能は、SSMLマークアップ言語[SSML]には対応するものがありません。

auto
displaynoneの場合、算出値はneverとなり、それ以外の場合はautoとなります。 算出値がautoの場合、visibilityvisibleならalwaysと同等、それ以外ならneverと同等になります。

注記: none値は選択要素の子孫によって上書きできませんが、auto値はneverまたはalwaysで上書き可能です。

never
この値は要素(ポーズ、キュー、レスト、実際の内容も含む)がレンダリングされないことを意味します(つまり、音声次元では効果がありません)。

注記: この値が設定された要素の子孫は値を上書きできるため、下位要素が音声レンダリングに参加することが可能です。 ただし、親要素のポーズ・キュー・レストは音声次元で“無効化”されるため、ポーズの折りたたみや隣接レストの加算動作には寄与しません。

always
要素は音声でレンダリングされます(display値や親のdisplayspeak値に関係なく)。

注記: この値を使うと、視覚的には描画されない要素も音声次元でレンダリングされる場合があります。

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は、構成する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>
値にはchildyoungoldがあり、ボイス選択時に優先する年齢カテゴリを示します。

注記: [SSML]の年齢との推奨対応関係は、child = 6歳、young = 24歳、old = 75歳。 より柔軟な年齢範囲はプロセッサ依存のボイスマッチアルゴリズムで使われる場合があります。

<gender>
malefemaleneutral のいずれかのキーワードで、それぞれ男性、女性、中性の声を指定します。

注記: 年齢や性別と認識可能な声タイプとの関係は、文化的・言語的・生物学的など多数の要素に依存するため、普遍的に定義できません。 本仕様の機能は様々な音声コンテキストに合理的に適用できる簡易モデルを提供するものであり、一定の近似を伴います。 将来の仕様では音声マッチアルゴリズムの精度がさらに洗練される可能性があります。

<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音声特性よりも優先されます(高い優先度を持ちます)。

以下はボイス選択アルゴリズムの概要です (「言語」は方言なども含む緩やかな定義として扱います):

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])に類似しています。

この例では、略語のレンダリングに要素内容ではなくtitle属性の内容が使われます。
/* 選択要素の内容を "World Wide Web Consortium" という文字列に置換します。 */
abbr { content: attr(title); }
...

<abbr title="World Wide Web Consortium">W3C</abbr>

同様に、ドキュメント内のテキスト文字列を予め録音されているバージョンに置換できます。

この例では、(フォーマットがサポートされ、ファイルが存在し、UAが設定されている場合)サー・ジョン・ギールグッドによる有名なモノローグの録音が再生されます。 再生できない場合は、UAは合成音声によるテキスト読み上げにフォールバックします。
.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]など。

スタイルシート

CSSスタイルシート

付録D — 謝辞

編集者は、この仕様の作成にあたりご協力いただいたW3C Voice BrowserおよびCascading Style Sheetsワーキンググループのメンバーに感謝いたします。 特にEllen Eide(IBM)には詳細なコメント、Elika Etemad(Fantasai)には精緻なレビューをいただき、深く感謝いたします。

付録E — 変更点

以下は2012 Candidate Recommendation以降の変更点です:

この他、いくつかの軽微な編集修正があり、ソースがBikeshed形式に変換されました。

適合性

文書の記法

適合要件は、説明的な断言とRFC 2119の用語の組み合わせで表現されます。規範的部分で「MUST」「MUST NOT」「REQUIRED」「SHALL」「SHALL NOT」「SHOULD」「SHOULD NOT」「RECOMMENDED」「MAY」「OPTIONAL」というキーワードが使われる場合は、RFC 2119に従って解釈してください。 ただし、可読性のため本仕様ではすべて大文字ではなく表記しています。

この仕様のすべてのテキストは、明示的に非規範的・例・注記と記載されている部分を除き、規範的です。[RFC2119]

この仕様の例は「for example」で導入されるか、またはclass="example"で規範テキストから分離されます。

これは情報的な例です。

情報的注記は「Note」で始まり、class="note"で規範テキストから分離されます。

注記:これは情報的な注記です。

助言(advisement)は規範部分で特に注意を促すためのスタイルで、<strong class="advisement">で他の規範テキストから分離されます。例: UAはアクセシブルな代替手段を必ず提供しなければなりません。

適合クラス

本仕様への適合は、次の3つの適合クラスで定義されます:

スタイルシート
CSSスタイルシート
レンダラー
スタイルシートの意味を解釈し、それを用いて文書をレンダリングするUA
オーサリングツール
スタイルシートを書き出すUA

このモジュールで定義された文法に従い、構文的に正しい文または宣言のみを使っている場合、そのスタイルシートは本仕様に適合します。

レンダラーは、適切な仕様で定義されたスタイルシートの解釈に加え、本仕様で定義されたすべての機能を正しくパースして文書をレンダリングしていれば適合します。ただし、デバイスの制限により正しくレンダリングできない場合でも非適合とはなりません。(例:モノクロモニターで色がレンダリングできなくてもよい)

オーサリングツールは、CSS一般文法および本モジュールで定義された各機能の文法に従って構文的に正しいスタイルシートを書き出し、かつ本モジュールで定める他の適合要件を満たしていれば適合です。

部分実装

著者がフォワードコンパチブルなパース規則を利用してフォールバック値を指定できるよう、CSSレンダラーは、サポートしていないatルール、プロパティ、プロパティ値、キーワード、その他の構文要素を無効(適切に無視として扱わなければなりません。特に、ユーザーエージェントは、1つの複数値プロパティ宣言の中で未サポート値だけを無視し、サポート値だけを適用してはなりません。いずれかの値が無効(未サポート値は必ず無効)とみなされる場合、CSSでは宣言全体を無視する必要があります。

将来拡張・独自機能の実装

将来の安定CSS機能と衝突しないよう、CSSWGはベストプラクティスに従って、不安定機能や独自拡張を実装することを推奨します。

非実験的実装

仕様が候補勧告段階に達したら、実験的でない実装が可能となり、実装者は仕様通りに正しく実装できたCRレベルの機能について、プリフィックスなしでリリースすべきです。

CSSの実装間で相互運用性を確保・維持するため、CSSワーキンググループは、非実験的なCSSレンダラーが実装レポート(必要に応じてそのテストケースも)をW3Cに提出することを推奨しています。W3Cに提出されたテストケースは、CSSワーキンググループによるレビューと修正の対象となります。

テストケースや実装レポートの提出方法については、CSSワーキンググループのウェブサイト https://www.w3.org/Style/CSS/Test/ を参照してください。 質問はpublic-css-testsuite@w3.org メーリングリストへ。

CR終了基準

この仕様を提案勧告に進めるには、各機能について少なくとも2つの独立した相互運用可能な実装が必要です。各機能は製品ごとに実装されてもよく、すべての機能が1製品で実装されている必要はありません。この基準のため、用語を次のように定義します:

独立
各実装は異なる組織によって開発され、他の実装のコードを共有・再利用・派生してはなりません。ただし、本仕様の実装に影響しないコード部分はこの限りではありません。
相互運用
公式CSSテストスイートの該当テストケース、またはWebブラウザ以外の場合は同等のテストに合格すること。全ての関連テストに同等のテストを用意し、相互運用性主張のためには同じ方法で複数UAが合格している必要があります。同等テストはピアレビューのため公開してください。
実装
次の条件を満たすユーザーエージェント:
  1. 本仕様を実装している。
  2. 一般公開されている(出荷製品またはベータ/プレビュー/ナイトリービルド等の公開バージョン)。非出荷品は少なくとも1ヶ月間その機能を実装している必要があります。
  3. 実験的(テスト通過専用で今後通常利用されない)バージョンでないこと。

仕様は少なくとも6ヶ月間、候補勧告段階にとどまります。

索引

本仕様で定義される用語

参照によって定義される用語

参考文献

規範的参考文献

[CSS-BACKGROUNDS-3]
Bert Bos; Elika Etemad; Brad Kemper. CSS Backgrounds and Borders Module Level 3. 2021年7月26日. CR. URL: https://www.w3.org/TR/css-backgrounds-3/
[CSS-BOX-4]
Elika Etemad. CSS Box Model Module Level 4. 2022年11月3日. WD. URL: https://www.w3.org/TR/css-box-4/
[CSS-CASCADE-5]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSS Cascading and Inheritance Level 5. 2022年1月13日. CR. URL: https://www.w3.org/TR/css-cascade-5/
[CSS-COUNTER-STYLES-3]
Tab Atkins Jr.. CSS Counter Styles Level 3. 2021年7月27日. CR. URL: https://www.w3.org/TR/css-counter-styles-3/
[CSS-DISPLAY-3]
Tab Atkins Jr.; Elika Etemad. CSS Display Module Level 3. 2022年11月18日. CR. URL: https://www.w3.org/TR/css-display-3/
[CSS-FONTS-4]
John Daggett; Myles Maxfield; Chris Lilley. CSS Fonts Module Level 4. 2021年12月21日. WD. URL: https://www.w3.org/TR/css-fonts-4/
[CSS-POSITION-3]
Elika Etemad; Tab Atkins Jr.. CSS Positioned Layout Module Level 3. 2022年9月1日. WD. URL: https://www.w3.org/TR/css-position-3/
[CSS-PSEUDO-4]
Daniel Glazman; Elika Etemad; Alan Stearns. CSS Pseudo-Elements Module Level 4. 2022年12月30日. WD. URL: https://www.w3.org/TR/css-pseudo-4/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 3. 2022年12月1日. CR. URL: https://www.w3.org/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 4. 2022年10月19日. WD. URL: https://www.w3.org/TR/css-values-4/
[CSS2]
Bert Bos; 他. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 2011年6月7日. REC. URL: https://www.w3.org/TR/CSS21/
[CSS22]
Bert Bos. Cascading Style Sheets Level 2 Revision 2 (CSS 2.2) Specification. 2016年4月12日. WD. URL: https://www.w3.org/TR/CSS22/
[CSS3GENCON]
Elika Etemad; Dave Cramer. CSS Generated Content Module Level 3. 2019年8月2日. WD. URL: https://www.w3.org/TR/css-content-3/
[CSS3LIST]
Elika Etemad; Tab Atkins Jr.. CSS Lists and Counters Module Level 3. 2020年11月17日. WD. URL: https://www.w3.org/TR/css-lists-3/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra Standard. Living Standard. URL: https://infra.spec.whatwg.org/
[MEDIAQUERIES-5]
Dean Jackson; 他. Media Queries Level 5. 2021年12月18日. WD. URL: https://www.w3.org/TR/mediaqueries-5/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. 1997年3月. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[SSML]
Daniel Burnett; Zhi Wei Shuang. Speech Synthesis Markup Language (SSML) Version 1.1. 2010年9月7日. REC. URL: https://www.w3.org/TR/speech-synthesis11/
[XML11]
Tim Bray; 他. Extensible Markup Language (XML) 1.1 (Second Edition). 2006年8月16日. REC. URL: https://www.w3.org/TR/xml11/

参考情報

[HTML]
Anne van Kesteren; 他. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[PRONUNCIATION-LEXICON]
Paolo Baggia. Pronunciation Lexicon Specification (PLS) Version 1.0. 2008年10月14日. REC. URL: https://www.w3.org/TR/pronunciation-lexicon/
[SSML-SAYAS]
Daniel Burnett; 他. SSML 1.0 say-as attribute values. 2005年5月26日. NOTE. URL: https://www.w3.org/TR/ssml-sayas/

プロパティ索引

名前 初期値 適用対象 継承 %ages 正規順序 算出値
cue <'cue-before'> <'cue-after'>? N/A(個々のプロパティを参照) すべての要素 no N/A 文法どおり N/A(個々のプロパティを参照)
cue-after <uri> <decibel>? | none none すべての要素 no N/A 文法どおり 指定値
cue-before <uri> <decibel>? | none none すべての要素 no N/A 文法どおり 指定値
pause <'pause-before'> <'pause-after'>? N/A(個々のプロパティを参照) すべての要素 no N/A 文法どおり N/A(個々のプロパティを参照)
pause-after <time> | none | x-weak | weak | medium | strong | x-strong none すべての要素 no N/A 文法どおり 指定値
pause-before <time> | none | x-weak | weak | medium | strong | x-strong none すべての要素 no N/A 文法どおり 指定値
rest <'rest-before'> <'rest-after'>? N/A(個々のプロパティを参照) すべての要素 no N/A 文法どおり N/A(個々のプロパティを参照)
rest-after <time> | none | x-weak | weak | medium | strong | x-strong none すべての要素 no N/A 文法どおり 指定値
rest-before <time> | none | x-weak | weak | medium | strong | x-strong none すべての要素 no N/A 文法どおり 指定値
speak auto | never | always auto すべての要素 yes N/A 文法どおり 指定値
speak-as normal | spell-out || digits || [ literal-punctuation | no-punctuation ] normal すべての要素 yes N/A 文法どおり 指定値
voice-balance <number> | left | center | right | leftwards | rightwards center すべての要素 yes N/A 文法どおり 指定値を-100から100(含む)の<number>に解決
voice-duration auto | <time> auto すべての要素 no N/A 文法どおり 指定値
voice-family [[<family-name> | <generic-voice>],]* [<family-name> | <generic-voice>] | preserve 実装依存 すべての要素 yes N/A 文法どおり 指定値
voice-pitch <frequency> && absolute | [[x-low | low | medium | high | x-high] || [<frequency> | <semitones> | <percentage>]] medium すべての要素 yes 継承値を参照 文法どおり キーワードのみなら定義済みピッチキーワードのいずれか、それ以外は現在のvoice-familyに基づく固定周波数+相対オフセット適用の絶対周波数
voice-range <frequency> && absolute | [[x-low | low | medium | high | x-high] || [<frequency> | <semitones> | <percentage>]] medium すべての要素 yes 継承値を参照 文法どおり キーワードのみなら定義済みピッチキーワードのいずれか、それ以外は現在のvoice-familyに基づく固定周波数+相対オフセット適用の絶対周波数
voice-rate [normal | x-slow | slow | medium | fast | x-fast] || <percentage> normal すべての要素 yes デフォルト値参照 文法どおり キーワード値、および(100%でなければ)そのキーワードに対するパーセンテージ
voice-stress normal | strong | moderate | none | reduced normal すべての要素 yes N/A 文法どおり 指定値
voice-volume silent | [[x-soft | soft | medium | loud | x-loud] || <decibel>] medium すべての要素 yes N/A 文法どおり silent、またはキーワード値および(ゼロでなければ)デシベルオフセット