付録 A. オーラルスタイルシート

目次

この章は情報提供のためのものです。CSS 2.2に準拠するために、この章のプロパティをユーザーエージェントが実装する必要はありません。

A.1 メディアタイプ 'aural' と 'speech'

将来のCSSのレベルでは、音声出力のための新しいプロパティや値が定義されることを期待しています。そのため、CSS 2.2では 'speech' メディアタイプを予約しています(第7章「メディアタイプ」を参照)が、どのプロパティが適用されるか、また適用されないかはまだ定義されていません。

この付録のプロパティは、CSS2で導入された 'aural' というメディアタイプに適用されます。ただし、'aural' タイプは現在廃止されています。

つまり、以下のようなスタイルシートは

@media speech {
  body { voice-family: Paul }
}
        

有効ですが、その意味はCSS 2.2では定義されていません。一方、

@media aural {
  body { voice-family: Paul }
}
        

は廃止されていますが、この付録で定義されています。

A.2 オーラルスタイルシートの紹介

文書のオーラルレンダリングは、視覚障害者や印刷物に不自由がある人々の間ですでに一般的に使用されており、音声合成と「聴覚アイコン」を組み合わせたものです。このようなオーラルプレゼンテーションは、文書をプレーンテキストに変換し、それをスクリーンリーダー(画面上のすべての文字を単純に読み上げるソフトウェアまたはハードウェア)に送ることで行われることがよくあります。この方法では、文書構造が保持される場合に比べて効果的なプレゼンテーションが得られません。オーラルプレゼンテーション用のスタイルシートプロパティは、視覚プロパティと組み合わせて(混合メディアとして)使用したり、視覚プレゼンテーションのオーラル代替として使用することができます。

明らかなアクセシビリティの利点に加えて、情報を聴くための他の大きな市場も存在します。これには、車内での使用、産業用および医療用文書管理システム(イントラネット)、家庭用エンターテイメント、さらには読み方を学んでいるユーザーや読むのが苦手なユーザーを支援するための用途が含まれます。

オーラルプロパティを使用する際、キャンバスは三次元の物理空間(音声環境)と時間的空間(他の音に対して前後または同時に音を指定できます)で構成されます。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" の段落は非常に静かに聞こえるようにします。

A.2.1 角度

角度値は、<angle>として表されます。 その形式は、<number>の後に角度単位識別子が直付けされたものです。

角度単位識別子は以下の通りです:

角度値は負の値を取ることができます。ユーザーエージェントによって0-360degの範囲に正規化されるべきです。例えば、-10degと350degは同等です。

例えば、直角は '90deg' または '100grad' または '1.570796326794897rad' と表されます。

<length>と同様に、値がゼロの場合は単位を省略することができます。'0deg' は '0' と書くことができます。

A.2.2 時間

時間値は、<time>として表されます。 その形式は、<number>の後に時間単位識別子が直付けされたものです。

時間単位識別子は以下の通りです:

時間値は負の値を取ることはできません。

<length>と同様に、値がゼロの場合は単位を省略することができます。'0s' は '0' と書くことができます。

A.2.3 周波数

周波数値は、<frequency>として表されます。 その形式は、<number>の後に周波数単位識別子が直付けされたものです。

周波数単位識別子は以下の通りです:

周波数値は負の値を取ることはできません。

例えば、200Hz(または200hz)は低音であり、6kHzは高音です。

<length>と同様に、値がゼロの場合は単位を省略することができます。'0Hz' は '0' と書くことができます。

A.3 音量プロパティ: 'volume'

名前: volume
値: <number> | <percentage> | silent | x-soft | soft | medium | loud | x-loud | inherit
初期値: medium
適用対象: すべての要素
継承: はい
パーセンテージ: 継承された値を参照
メディア: aural
計算値: number

音量は、波形の中央値の音量を指します。つまり、50の音量であっても、抑揚の強い声ではピークがその上に達する可能性があります。全体の値は、快適さのために調整可能であることが多く、例えば物理的な音量コントロールで(0と100の値が比例して増加します)。このプロパティは、ダイナミックレンジを調整します。

値の意味は以下の通りです:

<number>
'0'から'100'までの任意の数値。 '0'は聞こえる最小限の 音量レベル、'100'は快適に聞こえる最大レベルを表します。
<percentage>
パーセンテージ値は継承された値に対して計算され、その後'0'から'100'の範囲にクリップされます。
silent
音がまったくありません。値が'0'であることは'silent'と同じ意味ではありません。
x-soft
'0'と同じ。
soft
'25'と同じ。
medium
'50'と同じ。
loud
'75'と同じ。
x-loud
'100'と同じ。

ユーザーエージェントは、'0'と'100'に対応する値をリスナーが設定できるようにするべきです。どの設定も普遍的に適用可能ではありません。適切な値は、使用する機器(スピーカー、ヘッドホン)、環境(車内、家庭用シアター、図書館)、および個人の好みに依存します。一部の例を示します:

同じ著者のスタイルシートをすべての場合に使用できます。クライアント側で'0'と'100'のポイントを適切にマッピングするだけです。

A.4 発話プロパティ: 'speak'

名前: speak
値: normal | none | spell-out | inherit
初期値: normal
適用対象: すべての要素
継承: はい
パーセンテージ: N/A
メディア: aural
計算値: 指定された通り

このプロパティは、テキストがオーラルにレンダリングされるかどうか、またされる場合にはどのような方法で行われるかを指定します。可能な値は以下の通りです:

none
オーラルレンダリングを抑制し、要素がレンダリングに時間を必要としなくなります。ただし、この値は子孫によって上書きされ、子孫は発話される可能性があります。(要素とその子孫のレンダリングを確実に抑制するには、'display' プロパティを使用してください)。
normal
言語に依存する発音ルールを使用して、要素とその子要素をレンダリングします。
spell-out
テキストを1文字ずつ発音します(頭字語や省略形に役立ちます)。

'volume' プロパティが 'silent' の値を持つ要素と、'speak' プロパティが 'none' の値を持つ要素の違いに注意してください。前者は、発話されていた場合と同じ時間を占めます(要素の前後のポーズを含む)が、音は生成されません。後者は時間を必要とせず、レンダリングされません(ただし、子孫はレンダリングされる可能性があります)。

A.5 ポーズプロパティ: 'pause-before', 'pause-after', および 'pause'

名前: pause-before
値: <time> | <percentage> | inherit
初期値: 0
適用対象: すべての要素
継承: いいえ
パーセンテージ: 本文を参照
メディア: aural
計算値: time
名前: pause-after
値: <time> | <percentage> | inherit
初期値: 0
適用対象: すべての要素
継承: いいえ
パーセンテージ: 本文を参照
メディア: aural
計算値: time

これらのプロパティは、要素の内容を話す前(または後)に挿入されるポーズを指定します。値の意味は以下の通りです:

注意。 CSS3では、ポーズはキューとコンテンツの間ではなく、それらの周囲に挿入されます。詳細は[CSS3SPEECH]を参照してください。

<time>
絶対的な時間単位(秒およびミリ秒)でポーズを表します。
<percentage>
'speech-rate'プロパティの値の逆数を参照します。 例えば、speech-rateが120語/分(つまり、単語に0.5秒または500msかかる)であれば、'pause-before'が100%の場合は500msのポーズを意味し、'pause-before'が20%の場合は100msを意味します。

ポーズは、要素のコンテンツと、'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 */

A.6 キュープロパティ: 'cue-before', 'cue-after', および 'cue'

名前: cue-before
値: <uri> | none | inherit
初期値: none
適用対象: すべての要素
継承: いいえ
パーセンテージ: N/A
メディア: aural
計算値: 絶対URIまたは'none'
名前: cue-after
値: <uri> | none | inherit
初期値: none
適用対象: すべての要素
継承: いいえ
パーセンテージ: N/A
メディア: aural
計算値: 絶対URIまたは'none'

聴覚アイコンは、セマンティック要素を区別する別の方法です。音は要素を区切るために、要素の前後で再生される場合があります。値の意味は以下の通りです:

<uri>
URIは聴覚アイコンリソースを指定する必要があります。URIがオーディオファイル以外(画像など)に解決された場合、リソースは無視され、このプロパティは'none'の値として扱われるべきです。
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' 疑似要素のコンテンツの後に挿入されます。

A.7 ミキシングプロパティ: 'play-during'

名前: play-during
値: <uri> [ mix || repeat ]? | auto | none | inherit
初期値: auto
適用対象: すべての要素
継承: いいえ
パーセンテージ: N/A
メディア: aural
計算値: 絶対URI、その他は指定された通り

'cue-before' プロパティや 'cue-after' プロパティと同様に、このプロパティは要素の内容が話されている間にバックグラウンドとして再生されるサウンドを指定します。 値の意味は以下の通りです:

<uri>
この<uri>で指定されたサウンドが、要素の内容が話されている間にバックグラウンドとして再生されます。
mix
このキーワードが存在する場合、親要素の'play-during'プロパティから継承されたサウンドが再生を続け、この<uri>で指定されたサウンドとミックスされます。'mix'が指定されていない場合、要素のバックグラウンドサウンドは親のものを置き換えます。
repeat
このキーワードが存在する場合、要素の期間全体を埋めるには短すぎる場合、サウンドが繰り返されます。それ以外の場合、サウンドは一度再生され停止します。これは'background-repeat'プロパティに似ています。サウンドが要素に対して長すぎる場合、要素が話された後にクリップされます。
auto
親要素のサウンドが再生を続けます(このプロパティが継承されていた場合のように再開始されません)。
none
このキーワードは、無音を意味します。親要素のサウンド(存在する場合)は現在の要素の間は無音となり、現在の要素の後に再開します。

例:

blockquote.sad { play-during: url("violins.aiff") }
blockquote Q   { play-during: url("harp.wav") mix }
span.quiet     { play-during: none }

A.8 空間プロパティ: 'azimuth' および 'elevation'

空間オーディオは、オーラルプレゼンテーションにおいて重要なスタイリスティックプロパティです。これは、現実生活と同様に複数の声を自然に区別する方法を提供します(人々が部屋の同じ場所に立つことはほとんどない)。ステレオスピーカーは横方向のサウンドステージを生成します。バイノーラルヘッドフォンまたはますます普及している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
計算値: 正規化された角度

値の意味は以下の通りです:

<angle>
位置は'-360deg'から'360deg'の範囲内の角度で記述されます。 '0deg'はサウンドステージの中央を真っ直ぐ前方に意味します。'90deg'は右側、'180deg'は後方、'270deg'(または同等で便利な'-90deg')は左側を意味します。
left-side
'270deg'と同じです。'behind'の場合も'270deg'。
far-left
'300deg'と同じです。'behind'の場合は'240deg'。
left
'320deg'と同じです。'behind'の場合は'220deg'。
center-left
'340deg'と同じです。'behind'の場合は'200deg'。
center
'0deg'と同じです。'behind'の場合は'180deg'。
center-right
'20deg'と同じです。'behind'の場合は'160deg'。
right
'40deg'と同じです。'behind'の場合は'140deg'。
far-right
'60deg'と同じです。'behind'の場合は'120deg'。
right-side
'90deg'と同じです。'behind'の場合も'90deg'。
leftwards
現在の角度に対して左に音を移動します。 より正確には、20度を減算します。 算術は360度モジュロで行われます。'leftwards'は「反時計回りに回転」とより正確に記述されるべきです。これは常に20度を減算するためです。
rightwards
現在の角度に対して右に音を移動します。 より正確には、20度を加算します。算術については'leftwards'を参照してください。

このプロパティは、同じ信号を異なるチャンネルに異なる音量でミキシングすることによって実装される可能性が最も高いです。また、フェーズシフト、デジタルディレイ、その他の技術を使用してサウンドステージの錯覚を提供することもできます。この効果を実現するための正確な方法や使用されるスピーカーの数はユーザーエージェントに依存します。このプロパティは単に望ましい最終結果を識別するものです。

例:

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
計算値: 正規化された角度

このプロパティの値の意味は以下の通りです:

<angle>
角度として標高を指定します。'-90deg'から'90deg'の間。 '0deg'は前方地平線上、リスナーとほぼ同じ高さを意味します。'90deg'は真上、'-90deg'は真下を意味します。
below
'-90deg'と同じ。
level
'0deg'と同じ。
above
'90deg'と同じ。
higher
現在の標高に10度を加算します。
lower
現在の標高から10度を減算します。

この効果を実現するために使用される具体的な手段やスピーカーの数は定義されていません。このプロパティは単に望ましい最終結果を識別するものです。

例:

h1   { elevation: above }
tr.a { elevation: 60deg }
tr.b { elevation: 30deg }
tr.c { elevation: level }

A.9 音声特性プロパティ: 'speech-rate', 'voice-family', 'pitch', 'pitch-range', 'stress', および 'richness'

名前: speech-rate
値: <number> | x-slow | slow | medium | fast | x-fast | faster | slower | inherit
初期値: medium
適用対象: すべての要素
継承: はい
パーセンテージ: N/A
メディア: aural
計算値: number

このプロパティは発話速度を指定します。絶対キーワード値と相対キーワード値の両方が許可されます('font-size'と比較してください)。値の意味は以下の通りです:

<number>
言語ごとに若干異なりますが、単語毎分(WPM)で発話速度を指定します。この値は多くの音声合成装置で広くサポートされています。
x-slow
80 WPM と同じ。
slow
120 WPM と同じ。
medium
180 ~ 200 WPM と同じ。
fast
300 WPM と同じ。
x-fast
500 WPM と同じ。
faster
現在の発話速度に 40 WPM を加えます。
slower
現在の発話速度から 40 WPM を減じます。
名前: voice-family
値: [[<specific-voice> | <generic-voice> ],]* [<specific-voice> | <generic-voice> ] | inherit
初期値: ユーザーエージェントに依存
適用対象: すべての要素
継承: はい
パーセンテージ: N/A
メディア: aural
計算値: 指定された通り

値はコンマ区切りで優先順位付けされた音声ファミリー名のリストです('font-family'と比較してください)。値の意味は以下の通りです:

<generic-voice>
値は音声ファミリーです。可能な値は 'male'、'female'、および 'child' です。
<specific-voice>
値は特定のインスタンス(例: comedian, trinoids, carlos, lani)です。

例:

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です。

値の意味は以下の通りです:

<frequency>
発話音声の平均ピッチをヘルツ(Hz)で指定します。
x-low, low, medium, high, x-high
これらの値は絶対的な周波数にマッピングされません。これらの値は音声ファミリーとユーザー環境に基づいて適切な周波数にマッピングされるべきです。ただし、ユーザーエージェントはこれらの値を順序通りにマッピングする必要があります(例: 'x-low' は 'low' より低い周波数である、など)。
名前: pitch-range
値: <number> | inherit
初期値: 50
適用対象: すべての要素
継承: はい
パーセンテージ: N/A
メディア: aural
計算値: 指定された通り

平均ピッチの変動を指定します。人間の声の知覚されるピッチは基本周波数によって決まり、通常、男性の声は約120Hz、女性の声は約210Hzです。人間の言語は変化する抑揚とピッチで話され、これらの変化は追加の意味と強調を伝えます。そのため、非常にアニメーションされた声、つまり大幅に抑揚のある声は高いピッチ範囲を示します。このプロパティは、これらの変化が発生する範囲、つまり基本周波数が平均ピッチからどれだけ偏るかを指定します。

値の意味は以下の通りです:

<number>
'0' から '100' の間の値。ピッチ範囲が '0' の場合、平坦で単調な声を生成します。ピッチ範囲が 50 の場合、通常の抑揚を生成します。50 を超えるピッチ範囲はアニメーションされた声を生成します。
名前: stress
値: <number> | inherit
初期値: 50
適用対象: すべての要素
継承: はい
パーセンテージ: N/A
メディア: aural
計算値: 指定された通り

声の抑揚の輪郭における「局所的なピーク」の高さを指定します。例えば、英語は強勢言語であり、文の異なる部分に主要な強勢、二次的な強勢、または三次的な強勢が割り当てられます。'stress'の値は、これらの強勢マーカーに起因する抑揚の量を制御します。このプロパティは'pitch-range'プロパティの補完的なものであり、開発者が高機能な音声ディスプレイを活用できるように提供されています。

値の意味は以下の通りです:

<number>
'0' から '100' の間の値。値の意味は使用される言語によって異なります。例えば、 標準的な英語を話す男性の声(平均ピッチ = 122Hz)が通常の抑揚と強調で話す場合のレベル '50' は、 イタリア語の声の '50' とは異なる意味を持ちます。
名前: richness
値: <number> | inherit
初期値: 50
適用対象: すべての要素
継承: はい
パーセンテージ: N/A
メディア: aural
計算値: 指定された通り

話し声の豊かさ、または明るさを指定します。豊かな声は広い部屋で「響く」一方で、滑らかな声は響きません。(「滑らか」という用語は波形を描いたときの見た目を指します。)

値の意味は以下の通りです:

<number>
'0' から '100' の間の値。値が高いほど声は遠くまで響きます。値が低いほど柔らかく、心地よい声になります。

A.10 スピーチプロパティ: 'speak-punctuation' および 'speak-numeral'

追加のスピーチプロパティ、'speak-header'は以下に記載されています。

名前: speak-punctuation
値: code | none | inherit
初期値: none
適用対象: すべての要素
継承: はい
パーセンテージ: N/A
メディア: aural
計算値: 指定された通り

このプロパティは句読点がどのように話されるかを指定します。値の意味は以下の通りです:

code
セミコロンや中括弧などの句読点を文字通り話します。
none
句読点は話されず、代わりに様々な間として自然に表現されます。
名前: speak-numeral
値: digits | continuous | inherit
初期値: continuous
適用対象: すべての要素
継承: はい
パーセンテージ: N/A
メディア: aural
計算値: 指定された通り

このプロパティは数字がどのように話されるかを制御します。値の意味は以下の通りです:

digits
数字を個別の桁として話します。例えば、「237」は「ツー スリー セブン」と話されます。
continuous
数字を完全な数として話します。例えば、「237」は「二百三十七」と話されます。単語の表現は言語に依存します。

A.11 表の音声レンダリング

テーブルが音声生成器によって読み上げられる場合、データセルとヘッダーセルの関係は、水平および垂直の整列によってではなく、別の方法で表現される必要があります。一部の音声ブラウザは、ユーザーが2次元空間内を移動できるようにすることで、空間的に表現された関係を把握する機会を提供する場合があります。それが不可能な場合、スタイルシートはヘッダーが読み上げられるタイミングを指定する必要があります。

A.11.1 ヘッダーの読み上げ: 'speak-header' プロパティ

名前: speak-header
値: once | always | inherit
初期値: once
適用対象: テーブルヘッダー情報を持つ要素
継承: はい
パーセンテージ: N/A
メディア: aural
計算値: 指定された通り

このプロパティは、テーブルヘッダーがすべてのセルの前に読み上げられるか、またはそのセルが前のセルとは異なるヘッダーに関連付けられている場合にのみ読み上げられるかを指定します。値の意味は以下の通りです:

once
ヘッダーは一連のセルの前に1回読み上げられます。
always
ヘッダーは関連するすべてのセルの前に読み上げられます。

各ドキュメント言語には、ヘッダーを指定するための異なるメカニズムがある場合があります。例えば、HTML 4 ([HTML4]) では、「headers」、「scope」、および「axis」という3つの異なる属性を使用してヘッダー情報を指定することが可能であり、これらの属性が指定されていない場合のヘッダー情報を決定するためのアルゴリズムが仕様で提供されています。

MS Wordで作成された表の画像   [D]

ヘッダーセル(「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
...

A.12 HTMLのサンプルスタイルシート

このスタイルシートは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 }
}

A.13 Emacspeak

参考までに、Emacsエディタ用の音声サブシステムであるEmacspeakによって実装されているプロパティの一覧を以下に示します。

(音声プロパティの実装状況についての情報を提供してくれたT. V. Raman氏に感謝します。)