目次
この章は情報提供のためのものです。CSS 2.2に準拠するために、この章のプロパティをユーザーエージェントが実装する必要はありません。
将来のCSSのレベルでは、音声出力のための新しいプロパティや値が定義されることを期待しています。そのため、CSS 2.2では 'speech' メディアタイプを予約しています(第7章「メディアタイプ」を参照)が、どのプロパティが適用されるか、また適用されないかはまだ定義されていません。
この付録のプロパティは、CSS2で導入された 'aural' というメディアタイプに適用されます。ただし、'aural' タイプは現在廃止されています。
つまり、以下のようなスタイルシートは
@media speech { body { voice-family: Paul } }
有効ですが、その意味はCSS 2.2では定義されていません。一方、
@media aural { body { voice-family: Paul } }
は廃止されていますが、この付録で定義されています。
文書のオーラルレンダリングは、視覚障害者や印刷物に不自由がある人々の間ですでに一般的に使用されており、音声合成と「聴覚アイコン」を組み合わせたものです。このようなオーラルプレゼンテーションは、文書をプレーンテキストに変換し、それをスクリーンリーダー(画面上のすべての文字を単純に読み上げるソフトウェアまたはハードウェア)に送ることで行われることがよくあります。この方法では、文書構造が保持される場合に比べて効果的なプレゼンテーションが得られません。オーラルプレゼンテーション用のスタイルシートプロパティは、視覚プロパティと組み合わせて(混合メディアとして)使用したり、視覚プレゼンテーションのオーラル代替として使用することができます。
明らかなアクセシビリティの利点に加えて、情報を聴くための他の大きな市場も存在します。これには、車内での使用、産業用および医療用文書管理システム(イントラネット)、家庭用エンターテイメント、さらには読み方を学んでいるユーザーや読むのが苦手なユーザーを支援するための用途が含まれます。
オーラルプロパティを使用する際、キャンバスは三次元の物理空間(音声環境)と時間的空間(他の音に対して前後または同時に音を指定できます)で構成されます。CSSプロパティにより、合成音声の品質(声の種類、周波数、抑揚など)を変化させることもできます。
h1, h2, h3, h4, h5, h6 { voice-family: paul; stress: 20; richness: 90; cue-before: url("ping.au") } p.heidi { azimuth: center-left } p.peter { azimuth: right } p.goat { volume: x-soft }
この例では、スピーチシンセサイザーに対し、ヘッダーを「paul」という名前の声(「オーディオフォント」の一種)で話すよう指示します。声は平坦なトーンですが、非常にリッチな音声で発話されます。ヘッダーを話す前に、指定されたURLからサウンドサンプルが再生されます。クラス "heidi" の段落は音響システムが空間音声に対応している場合、左前方から聞こえるようにし、クラス "peter" の段落は右側から、クラス "goat" の段落は非常に静かに聞こえるようにします。
角度値は、<angle>として表されます。 その形式は、<number>の後に角度単位識別子が直付けされたものです。
角度単位識別子は以下の通りです:
角度値は負の値を取ることができます。ユーザーエージェントによって0-360degの範囲に正規化されるべきです。例えば、-10degと350degは同等です。
例えば、直角は '90deg' または '100grad' または '1.570796326794897rad' と表されます。
<length>と同様に、値がゼロの場合は単位を省略することができます。'0deg' は '0' と書くことができます。
時間値は、<time>として表されます。 その形式は、<number>の後に時間単位識別子が直付けされたものです。
時間単位識別子は以下の通りです:
時間値は負の値を取ることはできません。
<length>と同様に、値がゼロの場合は単位を省略することができます。'0s' は '0' と書くことができます。
周波数値は、<frequency>として表されます。 その形式は、<number>の後に周波数単位識別子が直付けされたものです。
周波数単位識別子は以下の通りです:
周波数値は負の値を取ることはできません。
例えば、200Hz(または200hz)は低音であり、6kHzは高音です。
<length>と同様に、値がゼロの場合は単位を省略することができます。'0Hz' は '0' と書くことができます。
名前: | volume |
---|---|
値: | <number> | <percentage> | silent | x-soft | soft | medium | loud | x-loud | inherit |
初期値: | medium |
適用対象: | すべての要素 |
継承: | はい |
パーセンテージ: | 継承された値を参照 |
メディア: | aural |
計算値: | number |
音量は、波形の中央値の音量を指します。つまり、50の音量であっても、抑揚の強い声ではピークがその上に達する可能性があります。全体の値は、快適さのために調整可能であることが多く、例えば物理的な音量コントロールで(0と100の値が比例して増加します)。このプロパティは、ダイナミックレンジを調整します。
値の意味は以下の通りです:
ユーザーエージェントは、'0'と'100'に対応する値をリスナーが設定できるようにするべきです。どの設定も普遍的に適用可能ではありません。適切な値は、使用する機器(スピーカー、ヘッドホン)、環境(車内、家庭用シアター、図書館)、および個人の好みに依存します。一部の例を示します:
同じ著者のスタイルシートをすべての場合に使用できます。クライアント側で'0'と'100'のポイントを適切にマッピングするだけです。
名前: | speak |
---|---|
値: | normal | none | spell-out | inherit |
初期値: | normal |
適用対象: | すべての要素 |
継承: | はい |
パーセンテージ: | N/A |
メディア: | aural |
計算値: | 指定された通り |
このプロパティは、テキストがオーラルにレンダリングされるかどうか、またされる場合にはどのような方法で行われるかを指定します。可能な値は以下の通りです:
'volume' プロパティが 'silent' の値を持つ要素と、'speak' プロパティが 'none' の値を持つ要素の違いに注意してください。前者は、発話されていた場合と同じ時間を占めます(要素の前後のポーズを含む)が、音は生成されません。後者は時間を必要とせず、レンダリングされません(ただし、子孫はレンダリングされる可能性があります)。
名前: | pause-before |
---|---|
値: | <time> | <percentage> | inherit |
初期値: | 0 |
適用対象: | すべての要素 |
継承: | いいえ |
パーセンテージ: | 本文を参照 |
メディア: | aural |
計算値: | time |
名前: | pause-after |
---|---|
値: | <time> | <percentage> | inherit |
初期値: | 0 |
適用対象: | すべての要素 |
継承: | いいえ |
パーセンテージ: | 本文を参照 |
メディア: | aural |
計算値: | time |
これらのプロパティは、要素の内容を話す前(または後)に挿入されるポーズを指定します。値の意味は以下の通りです:
注意。 CSS3では、ポーズはキューとコンテンツの間ではなく、それらの周囲に挿入されます。詳細は[CSS3SPEECH]を参照してください。
ポーズは、要素のコンテンツと、'cue-before'または'cue-after'コンテンツの間に挿入されます。
著者は、speech-rateの大きな変化に対応して、より堅牢なスタイルシートを作成するために相対単位を使用するべきです。
名前: | pause |
---|---|
値: | [ [<time> | <percentage>]{1,2} ] | inherit |
初期値: | 個々のプロパティを参照 |
適用対象: | すべての要素 |
継承: | いいえ |
パーセンテージ: | 'pause-before' と 'pause-after' の説明を参照 |
メディア: | aural |
計算値: | 個々のプロパティを参照 |
'pause'プロパティは、'pause-before' と 'pause-after' を設定するための簡略表記です。値が2つ指定されている場合、最初の値は'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 unspecified; pause-after: 10ms */
名前: | cue-before |
---|---|
値: | <uri> | none | inherit |
初期値: | none |
適用対象: | すべての要素 |
継承: | いいえ |
パーセンテージ: | N/A |
メディア: | aural |
計算値: | 絶対URIまたは'none' |
名前: | cue-after |
---|---|
値: | <uri> | none | inherit |
初期値: | none |
適用対象: | すべての要素 |
継承: | いいえ |
パーセンテージ: | N/A |
メディア: | aural |
計算値: | 絶対URIまたは'none' |
聴覚アイコンは、セマンティック要素を区別する別の方法です。音は要素を区切るために、要素の前後で再生される場合があります。値の意味は以下の通りです:
a {cue-before: url("bell.aiff"); cue-after: url("dong.wav") } h1 {cue-before: url("pop.au"); cue-after: url("pop.au") }
名前: | cue |
---|---|
値: | [ <'cue-before'> || <'cue-after'> ] | inherit |
初期値: | 個々のプロパティを参照 |
適用対象: | すべての要素 |
継承: | いいえ |
パーセンテージ: | N/A |
メディア: | aural |
計算値: | 個々のプロパティを参照 |
'cue' プロパティは、'cue-before' と 'cue-after' を設定するための簡略表記です。値が2つ指定されている場合、最初の値は'cue-before'、2番目の値は'cue-after'を指します。値が1つだけ指定されている場合、それは両方のプロパティに適用されます。
次の2つのルールは同等です:
h1 {cue-before: url("pop.au"); cue-after: url("pop.au") } h1 {cue: url("pop.au") }
ユーザーエージェントが聴覚アイコンをレンダリングできない場合(例: ユーザーの環境がそれを許可しない場合)、代替キューを生成することを推奨します。
他のコンテンツ生成技術に関する情報については、:before および :after 疑似要素のセクションを参照してください。'cue-before' サウンドと 'pause-before' ギャップは、':before' 疑似要素のコンテンツの前に挿入されます。同様に、'pause-after' ギャップと 'cue-after' サウンドは、':after' 疑似要素のコンテンツの後に挿入されます。
名前: | play-during |
---|---|
値: | <uri> [ mix || repeat ]? | auto | none | inherit |
初期値: | auto |
適用対象: | すべての要素 |
継承: | いいえ |
パーセンテージ: | N/A |
メディア: | aural |
計算値: | 絶対URI、その他は指定された通り |
'cue-before' プロパティや 'cue-after' プロパティと同様に、このプロパティは要素の内容が話されている間にバックグラウンドとして再生されるサウンドを指定します。 値の意味は以下の通りです:
blockquote.sad { play-during: url("violins.aiff") } blockquote Q { play-during: url("harp.wav") mix } span.quiet { play-during: none }
空間オーディオは、オーラルプレゼンテーションにおいて重要なスタイリスティックプロパティです。これは、現実生活と同様に複数の声を自然に区別する方法を提供します(人々が部屋の同じ場所に立つことはほとんどない)。ステレオスピーカーは横方向のサウンドステージを生成します。バイノーラルヘッドフォンまたはますます普及している5スピーカーのホームシアターセットアップは、完全なサラウンドサウンドを生成でき、多スピーカーセットアップは真の三次元サウンドステージを作成できます。VRML 2.0にも空間オーディオが含まれており、時が経てば消費者向け価格の空間オーディオハードウェアがより広く利用可能になることを意味します。
名前: | azimuth |
---|---|
値: | <angle> | [[ left-side | far-left | left | center-left | center | center-right | right | far-right | right-side ] || behind ] | leftwards | rightwards | inherit |
初期値: | center |
適用対象: | すべての要素 |
継承: | はい |
パーセンテージ: | N/A |
メディア: | aural |
計算値: | 正規化された角度 |
値の意味は以下の通りです:
このプロパティは、同じ信号を異なるチャンネルに異なる音量でミキシングすることによって実装される可能性が最も高いです。また、フェーズシフト、デジタルディレイ、その他の技術を使用してサウンドステージの錯覚を提供することもできます。この効果を実現するための正確な方法や使用されるスピーカーの数はユーザーエージェントに依存します。このプロパティは単に望ましい最終結果を識別するものです。
h1 { azimuth: 30deg } td.a { azimuth: far-right } /* 60deg */ #12 { azimuth: behind far-right } /* 120deg */ p.comment { azimuth: behind } /* 180deg */
空間-方位が指定されており、出力デバイスがリスニングポジションの後ろに音を生成できない場合、ユーザーエージェントは後方半球の値を前方半球の値に変換する必要があります。一つの方法は以下の通りです:
名前: | elevation |
---|---|
値: | <angle> | below | level | above | higher | lower | inherit |
初期値: | level |
適用対象: | すべての要素 |
継承: | はい |
パーセンテージ: | N/A |
メディア: | aural |
計算値: | 正規化された角度 |
このプロパティの値の意味は以下の通りです:
この効果を実現するために使用される具体的な手段やスピーカーの数は定義されていません。このプロパティは単に望ましい最終結果を識別するものです。
h1 { elevation: above } tr.a { elevation: 60deg } tr.b { elevation: 30deg } tr.c { elevation: level }
名前: | speech-rate |
---|---|
値: | <number> | x-slow | slow | medium | fast | x-fast | faster | slower | inherit |
初期値: | medium |
適用対象: | すべての要素 |
継承: | はい |
パーセンテージ: | N/A |
メディア: | aural |
計算値: | number |
このプロパティは発話速度を指定します。絶対キーワード値と相対キーワード値の両方が許可されます('font-size'と比較してください)。値の意味は以下の通りです:
名前: | voice-family |
---|---|
値: | [[<specific-voice> | <generic-voice> ],]* [<specific-voice> | <generic-voice> ] | inherit |
初期値: | ユーザーエージェントに依存 |
適用対象: | すべての要素 |
継承: | はい |
パーセンテージ: | N/A |
メディア: | aural |
計算値: | 指定された通り |
値はコンマ区切りで優先順位付けされた音声ファミリー名のリストです('font-family'と比較してください)。値の意味は以下の通りです:
h1 { voice-family: announcer, male } p.part.romeo { voice-family: romeo, male } p.part.juliet { voice-family: juliet, female }
特定の声の名前は引用符で囲むことができます。名前が複数の単語で構成されている場合や識別子の構文ルールに従わない場合には、引用符で囲む必要があります。引用符を省略した場合、音声ファミリー名の前後の空白文字は無視され、中間の空白文字の連続は単一のスペースに変換されます。
名前: | pitch |
---|---|
値: | <frequency> | x-low | low | medium | high | x-high | inherit |
初期値: | medium |
適用対象: | すべての要素 |
継承: | はい |
パーセンテージ: | N/A |
メディア: | aural |
計算値: | frequency |
発話音声の平均ピッチ(周波数)を指定します。音声の平均ピッチは音声ファミリーによります。例えば、標準的な男性の声の平均ピッチは約120Hz、女性の声では約210Hzです。
値の意味は以下の通りです:
名前: | pitch-range |
---|---|
値: | <number> | inherit |
初期値: | 50 |
適用対象: | すべての要素 |
継承: | はい |
パーセンテージ: | N/A |
メディア: | aural |
計算値: | 指定された通り |
平均ピッチの変動を指定します。人間の声の知覚されるピッチは基本周波数によって決まり、通常、男性の声は約120Hz、女性の声は約210Hzです。人間の言語は変化する抑揚とピッチで話され、これらの変化は追加の意味と強調を伝えます。そのため、非常にアニメーションされた声、つまり大幅に抑揚のある声は高いピッチ範囲を示します。このプロパティは、これらの変化が発生する範囲、つまり基本周波数が平均ピッチからどれだけ偏るかを指定します。
値の意味は以下の通りです:
名前: | stress |
---|---|
値: | <number> | inherit |
初期値: | 50 |
適用対象: | すべての要素 |
継承: | はい |
パーセンテージ: | N/A |
メディア: | aural |
計算値: | 指定された通り |
声の抑揚の輪郭における「局所的なピーク」の高さを指定します。例えば、英語は強勢言語であり、文の異なる部分に主要な強勢、二次的な強勢、または三次的な強勢が割り当てられます。'stress'の値は、これらの強勢マーカーに起因する抑揚の量を制御します。このプロパティは'pitch-range'プロパティの補完的なものであり、開発者が高機能な音声ディスプレイを活用できるように提供されています。
値の意味は以下の通りです:
名前: | richness |
---|---|
値: | <number> | inherit |
初期値: | 50 |
適用対象: | すべての要素 |
継承: | はい |
パーセンテージ: | N/A |
メディア: | aural |
計算値: | 指定された通り |
話し声の豊かさ、または明るさを指定します。豊かな声は広い部屋で「響く」一方で、滑らかな声は響きません。(「滑らか」という用語は波形を描いたときの見た目を指します。)
値の意味は以下の通りです:
追加のスピーチプロパティ、'speak-header'は以下に記載されています。
名前: | speak-punctuation |
---|---|
値: | code | none | inherit |
初期値: | none |
適用対象: | すべての要素 |
継承: | はい |
パーセンテージ: | N/A |
メディア: | aural |
計算値: | 指定された通り |
このプロパティは句読点がどのように話されるかを指定します。値の意味は以下の通りです:
名前: | speak-numeral |
---|---|
値: | digits | continuous | inherit |
初期値: | continuous |
適用対象: | すべての要素 |
継承: | はい |
パーセンテージ: | N/A |
メディア: | aural |
計算値: | 指定された通り |
このプロパティは数字がどのように話されるかを制御します。値の意味は以下の通りです:
テーブルが音声生成器によって読み上げられる場合、データセルとヘッダーセルの関係は、水平および垂直の整列によってではなく、別の方法で表現される必要があります。一部の音声ブラウザは、ユーザーが2次元空間内を移動できるようにすることで、空間的に表現された関係を把握する機会を提供する場合があります。それが不可能な場合、スタイルシートはヘッダーが読み上げられるタイミングを指定する必要があります。
名前: | speak-header |
---|---|
値: | once | always | inherit |
初期値: | once |
適用対象: | テーブルヘッダー情報を持つ要素 |
継承: | はい |
パーセンテージ: | N/A |
メディア: | aural |
計算値: | 指定された通り |
このプロパティは、テーブルヘッダーがすべてのセルの前に読み上げられるか、またはそのセルが前のセルとは異なるヘッダーに関連付けられている場合にのみ読み上げられるかを指定します。値の意味は以下の通りです:
各ドキュメント言語には、ヘッダーを指定するための異なるメカニズムがある場合があります。例えば、HTML 4 ([HTML4]) では、「headers」、「scope」、および「axis」という3つの異なる属性を使用してヘッダー情報を指定することが可能であり、これらの属性が指定されていない場合のヘッダー情報を決定するためのアルゴリズムが仕様で提供されています。
ヘッダーセル(「San Jose」と「Seattle」)が、それに適用されるデータと同じ列や行にない表の画像。
このHTMLの例では、食事、ホテル、交通費に関する費用が2つの場所(San Jose と Seattle)で連続する日付で記載されています。概念的には、この表をn次元空間として考えることができます。この空間のヘッダーは、場所、日付、カテゴリ、サブトータルです。一部のセルは軸のマークを定義し、他のセルはこの空間内のポイントで費やされた金額を示します。この表のマークアップは以下の通りです:
<TABLE> <CAPTION>旅行費用報告書</CAPTION> <TR> <TH></TH> <TH>食事</TH> <TH>ホテル</TH> <TH>交通</TH> <TH>小計</TH> </TR> <TR> <TH id="san-jose" axis="san-jose">San Jose</TH> </TR> <TR> <TH headers="san-jose">1997年8月25日</TH> <TD>37.74</TD> <TD>112.00</TD> <TD>45.00</TD> <TD></TD> </TR> <TR> <TH headers="san-jose">1997年8月26日</TH> <TD>27.28</TD> <TD>112.00</TD> <TD>45.00</TD> <TD></TD> </TR> <TR> <TH headers="san-jose">小計</TH> <TD>65.02</TD> <TD>224.00</TD> <TD>90.00</TD> <TD>379.02</TD> </TR> <TR> <TH id="seattle" axis="seattle">Seattle</TH> </TR> <TR> <TH headers="seattle">1997年8月27日</TH> <TD>96.25</TD> <TD>109.00</TD> <TD>36.00</TD> <TD></TD> </TR> <TR> <TH headers="seattle">1997年8月28日</TH> <TD>35.00</TD> <TD>109.00</TD> <TD>36.00</TD> <TD></TD> </TR> <TR> <TH headers="seattle">小計</TH> <TD>131.25</TD> <TD>218.00</TD> <TD>72.00</TD> <TD>421.25</TD> </TR> <TR> <TH>合計</TH> <TD>196.27</TD> <TD>442.00</TD> <TD>162.00</TD> <TD>800.27</TD> </TR> </TABLE>
このようにデータモデルを提供することで、音声対応ブラウザが表を豊かに探索できるようになります。例えば、各セルをリストとして読み上げ、各データセルの前に適用可能なヘッダーを繰り返すことができます:
San Jose, 1997年8月25日, 食事: 37.74 San Jose, 1997年8月25日, ホテル: 112.00 San Jose, 1997年8月25日, 交通: 45.00 ...
また、ブラウザはヘッダーが変更された場合にのみ読み上げることもできます:
San Jose, 1997年8月25日, 食事: 37.74 ホテル: 112.00 交通: 45.00 1997年8月26日, 食事: 27.28 ホテル: 112.00 ...
このスタイルシートはHTML 4の可能なレンダリングを記述しています:
@media aural { h1, h2, h3, h4, h5, h6 { voice-family: paul, male; stress: 20; richness: 90 } h1 { pitch: x-low; pitch-range: 90 } h2 { pitch: x-low; pitch-range: 80 } h3 { pitch: low; pitch-range: 70 } h4 { pitch: medium; pitch-range: 60 } h5 { pitch: medium; pitch-range: 50 } h6 { pitch: medium; pitch-range: 40 } li, dt, dd { pitch: medium; richness: 60 } dt { stress: 80 } pre, code, tt { pitch: medium; pitch-range: 0; stress: 0; richness: 80 } em { pitch: medium; pitch-range: 60; stress: 60; richness: 50 } strong { pitch: medium; pitch-range: 60; stress: 90; richness: 90 } dfn { pitch: high; pitch-range: 60; stress: 60 } s, strike { richness: 0 } i { pitch: medium; pitch-range: 60; stress: 60; richness: 50 } b { pitch: medium; pitch-range: 60; stress: 90; richness: 90 } u { richness: 0 } a:link { voice-family: harry, male } a:visited { voice-family: betty, female } a:active { voice-family: betty, female; pitch-range: 80; pitch: x-high } }
参考までに、Emacsエディタ用の音声サブシステムであるEmacspeakによって実装されているプロパティの一覧を以下に示します。
(音声プロパティの実装状況についての情報を提供してくれたT. V. Raman氏に感謝します。)