Microsoft DirectX 8.0 |
ここでは、MSWebDVD ActiveX® コントロールを使用してスクリプト ベースの DVD アプリケーションを記述する場合の基本的な作業について説明する。以下で述べる DVD 操作の概念に関する背景知識については、「DVD の基礎」を参照すること。
MSWebDVD オブジェクトによって、すべての DVD 操作コマンドおよびビデオ矩形表示が処理される。オブジェクトは、ビデオ表示矩形として Web ページに表示される。したがって、HTML ドキュメントの BODY 要素に埋め込む必要がある。矩形の幅と高さ、およびアプリケーションに必要なすべてのプロパティのデフォルト値を設定する。
<OBJECT CLASSID=clsid:38EE5CEE-4B62-11D3-854F-00A0C9C898E7 ID=DVD STYLE="height:369px; width:740px"> <PARAM NAME="BackColor" VALUE="1048592"> <PARAM NAME="EnableResetOnStop" VALUE="-1"> <PARAM NAME="ColorKey" VALUE="1048592"> </OBJECT>
ユーザーが DVD プレーヤーを制御できるようにするには、 "Stop" や "Play" などの DVD コマンドを発行するためのボタンが付いた UI を作成する必要がある。次のコード例では、基本的な HTML ボタンを MSWebDVD オブジェクト メソッドに結びつける方法を示す。
<INPUT ID=button1 NAME="button1" TYPE=button VALUE="Play" onClick='Play();'> <INPUT ID=button2 NAME="button2" TYPE=button VALUE="Pause" onClick='Pause();'> <SCRIPT LANGUAGE="JScript"> function Play(){ DVD.Play(); } function Pause(){ DVD.Pause(); } </SCRIPT>
ユーザーがマウスで画面上のボタンをクリックすると、MSWebDVD は自動的にメニュー コマンドを処理する。基本的なマウスのサポートを実装するために、アプリケーションで何か行う必要はない。しかし、メニュー ボタンのクリックで別の動作が行われるようにするために、この自動的なマウスの処理をアプリケーションによって無効にできる。たとえば、ユーザーがクリックしたボタンに応じて、特定のテキストまたはイメージを表示させることができる。カスタム マウス処理を実装するには、SelectAndActivateButton、GetButtonAtPosition などの MSWebDVD メニュー関連メソッドを使用する。 自動的なマウスの処理を完全に無効にするには、DisableAutoMouseProcessing プロパティを TRUE に設定する。
MSWebDVD では、SelectUpperButton などのメソッドのセットにより、DVD リモート コントロールを表すイメージ マップ、および現在のメニューを上下左右に動かすためのボタンを Web ページに表示させることができる。ドキュメントの中では、これらのボタンを "方向" ボタンまたは "相対" ボタンと呼んでいる。DVD メニューのボタンとは異なり、方向ボタンはアプリケーションによって表示される。
DVD-Video ディスクには最大 8 つのオーディオ ストリームを含むことができる。これには 0 から 7 までの番号が付けられ、それぞれ 6 つまでの独立したチャンネルを持つ。これらのうち、同時に選択できるのは 1 つのストリームだけである。サブピクチャの場合は、最大で 32 個のストリームを使用でき、0 から 31 までの番号が付けられている。これらのうち、同時に選択できるのは 1 つのストリームだけである。一般に、ディスクはデフォルトのオーディオおよびサブピクチャ ストリームを使って作成されているが、アプリケーションによって、特定のタイトルに対して使用可能なストリームをユーザーにすべて表示して、希望する言語のストリームを選択させることもできる。このプロセスにおける基本的な手順は、オーディオ ストリームの場合も、サブピクチャ ストリームの場合も同じである。
(オーディオおよびサブピクチャ ストリームには 0 から番号が付けられているのに対して、タイトル、アングル、およびペアレンタル ロック レベルには 1 から番号が付けられていることに注意する)
DVD-Video ディスクのタイトルやタイトルの一部には、一般的なペアレンタル ロック レベル (PML) 1 から 8 までを割り当てることができる。 8 は最も制限の強いレベルで、0 は最も制限の弱いレベルである。これは、親の承諾なしに子供が成人向けコンテンツを見ることを防ぐ方法を提供するという考え方である。各レベルの意味は国によって異なる。アメリカとカナダでは、Motion Picture Association of America のレーティング システム (G、PG、PG-13、NC-17) にレベルを割り当てているが、他の国では事情が異なる。国際的な市場向けの DVD アプリケーションでは、ペアレンタル ロック ロジックに特定のレーティング システムをハード コードすべきではない。
MSWebDVD オブジェクトは、デフォルトでディスク上の PML を無視する。ディスク上の PML マーカーが通知されるアプリケーションの場合は、NotifyParentalLevels(TRUE) を呼び出す必要がある。それにより MSWebDVD は、ディスク上で PML 情報を検出したときにアプリケーションに通知するようになる。PML を適用するには、ユーザーとレベルを関連付ける何らかのパスワード制御ロジックをアプリケーションに実装し、EC_DVD_PARENTAL_LEVEL_CHANGE イベントに応答してアクセスの許可または拒否を適切に行わなければならない。
ブックマークとは、現在のユーザー セッションのスナップショット (ディスク上の現在位置、DVD を見ているユーザーのペアレンタル ロック レベル、選択されたオーディオおよびサブピクチャ ストリーム、その他の情報) を作成するために MSWebDVD オブジェクトが使用する内部データ構造である。つまり、ユーザーは DVD-Video ディスク上の位置を保存し、後でその位置から再生することができる。
ユーザーは、SaveBookmark によってディスク上の位置を保存し、RestoreBookmark メソッドによって保存した位置から再生を再開できる。
一度に保存にできるブックマークは 1 つのみである。SaveBookmark を 2 回呼び出すと、最初のブックマークがオーバーライドされる。ブックマークは、コンピュータに固有のものである。同じ HTML ページを別のコンピュータで動作させて RestoreBookmark を呼び出すと、そのコンピュータで最後に保存されたブックマークが復元される。ブックマークが保存されていない場合はエラーが返される。
MSWebDVD オブジェクトは、特定のイベントが発生したときに、アプリケーションで指定されたメソッドに通知を送信する。これは、DVD ドメインが変更された場合、新しいペアレンタル ロック レベを検出した場合、およびアングル ブロックに入る場合などである。イベント パラメータには、イベントに関する追加情報を含むことができる。エラーメッセージや警告も同じ方法で送信される。さまざまな DVD イベント通知を取得するには、 MSWebDVD オブジェクトの OBJECT タグの下に次の HTML SCRIPT タグを入力する。
<SCRIPT LANGUAGE="JScript" FOR=DVD EVENT="DVDNotify(EventCode, Param1, Param2)"> ProcessDVDEvent(EventCode, Param1, Param2) </SCRIPT>
続いて、次のコード例に示すように、スクリプトにおいてイベント コードおよび ProcessDVDEvent 関数を定義する。(イベント処理関数には任意の名前を付けることができる。"ProcessEvents" である必要はない。)イベント コードの詳細については、「DVD イベント通知コード」を参照すること。
<SCRIPT LANGUAGE="JScript"> // DVD イベント コードには、257 から 283 までの値が設定されている。 var EC_DVDBASE = 256; var EC_DVD_DOMAIN_CHANGE = (EC_DVDBASE + 1); var EC_DVD_TITLE_CHANGE = (EC_DVDBASE + 2); var EC_DVD_CHAPTER_START = (EC_DVDBASE + 3); var EC_DVD_AUDIO_STREAM_CHANGE = (EC_DVDBASE + 4); var EC_DVD_SUBPICTURE_STREAM_CHANGE = (EC_DVDBASE + 5); var EC_DVD_ANGLE_CHANGE = (EC_DVDBASE + 6); var EC_DVD_BUTTON_CHANGE = (EC_DVDBASE + 7); var EC_DVD_VALID_UOPS_CHANGE = (EC_DVDBASE + 8); var EC_DVD_STILL_ON = (EC_DVDBASE + 9); var EC_DVD_STILL_OFF = (EC_DVDBASE + 10); var EC_DVD_CURRENT_TIME = (EC_DVDBASE + 11); // MSWebDVD では使用しない var EC_DVD_ERROR = (EC_DVDBASE + 12); var EC_DVD_WARNING = (EC_DVDBASE + 13); var EC_DVD_CHAPTER_AUTOSTOP = (EC_DVDBASE + 14); var EC_DVD_NO_FP_PGC = (EC_DVDBASE + 15); var EC_DVD_PLAYBACK_RATE_CHANGE = (EC_DVDBASE + 16); var EC_DVD_PARENTAL_LEVEL_CHANGE = (EC_DVDBASE + 17); var EC_DVD_PLAYBACK_STOPPED = (EC_DVDBASE + 18); var EC_DVD_ANGLES_AVAILABLE = (EC_DVDBASE + 19); var EC_DVD_PLAYPERIOD_AUTOSTOP = (EC_DVDBASE + 20); var EC_DVD_BUTTON_AUTO_ACTIVATED = (EC_DVDBASE + 21); var EC_DVD_CMD_START = (EC_DVDBASE + 22); // MSWebDVD では使用しない var EC_DVD_CMD_END = (EC_DVDBASE + 23); // MSWebDVD では使用しない var EC_DVD_DISC_EJECTED = (EC_DVDBASE + 24); var EC_DVD_DISC_INSERTED = (EC_DVDBASE + 25); var EC_DVD_CURRENT_HMSF_TIME = (EC_DVDBASE + 26); var EC_DVD_KARAOKE_MODE = (EC_DVDBASE + 27); var nCurDomain; var nCurParentalLevel; function ProcessDVDEvent(EventCode, Param1, Param2) { switch (EventCode) { case EC_DVD_DOMAIN_CHANGE: nCurDomain = Param1; // 何か行う。 break; case EC_DVD_PARENTAL_LEVEL_CHANGE: nCurParentalLevel = Param1; // 何か行う break; // 他のイベントを処理する default: break; } } </SCRIPT>
MSWebDVD オブジェクトは、ディスクによって特定のユーザー動作 (UOP) が有効または無効になったときに、UOP イベント通知を送信してアプリケーションに知らせる。各ユーザー動作には独自のイベントがあり、その動作が有効か無効かを示す 1 つの Boolean パラメータが設定されている。個々のイベントの詳細については、「MSWebDVD イベント」を参照すること。
処理対象の各イベントに対して、次の例のようにイベント ハンドラを指定する。(任意のハンドラ メソッドを呼び出すことができる。)
<SCRIPT LANGUAGE="JScript" FOR=DVD EVENT="PlayForwards(bEnabled)"> PlayForwardsEventHandler(bEnabled) </SCRIPT>次に、イベントに適切に応答するようにハンドラ メソッドを定義する。ここでは、"button_Play" 変数はアプリケーションの "Play" ボタンの id 属性であると仮定する。
function PlayForwardsEventHander(bEnabled) { if(bEnabled == true) button_Play.disabled = false; else button_Play.disabled = true; }
//DVDTriggerPoints 配列は、各トリガのフレーム数を保持する。昇順でなければならない。 //timecode2frames() を使用して、タイムコード (hh:mm:ss:ff) をフレームの合計数に変換する。 var DVDTriggerPoints = new Array( timecode2frames("01:15:24:00"), timecode2frames("01:23:02:00")); //DVDTriggerProcs 配列は、DVDTimePoints で定義された各トリガ ポイントで呼び出される関数を保持する。 var DVDTriggerProcs = new Array( "showDogPic();", "showCatPic();"); //DVDTriggerIndex は現在のトリガ (DVDTriggerPoints および DVDTriggerProcs を示す) を把握する。 var DVDTriggerIndex = 0; //DVD イベントを処理する function ProcessDVDEvent(EventCode, Param1, Param2) { switch (EventCode) { case EC_DVD_CURRENT_HMSF_TIME: if(MSWebDVD.CurrentDomain == 4) { //ディスクが再生中でなければ、チェックは必要ない。 if (DVDTriggerIndex < DVDTimePoints.length) { //チェックすべきトリガ ポイントは残っているか? currentDVDTime = (MSWebDVD.DVDTimeCode2bstr(Param1)); if (timecode2frames(currentDVDTime)>= DVDTriggerPoints[DVDTimeIndex]) { // トリガ ポイントが過ぎたら、関連する関数を実行する。 eval(DVDTriggerProcs[DVDTimeIndex++]); } } } break; // 他のイベントを処理する。 } } function timecode2frames(timeCode) { if (timeCode != "undefined") { return timeCode.substring(0,2)*108000 + timeCode.substring(3,5)*1800 + timeCode.substring(6,8)*30 + timeCode.substring(9,11); } else { return 0; } }
LCID すなわち "ロケール識別子" は、特定の地理的な範囲を識別できる、いくつかの異なる値を含んだ 32 ビット データ型である。この内部値の 1 つが "プライマリ言語 ID" であり、これによって英語、スペイン語、ロシア語など、地域やロケールの基本的な言語を識別する。
2 つのメソッド (SelectDefaultAudioLanguage と SelectDefaultSubpictureLanguage) に対する入力パラメータとして、MSWebDVD には完全に有効な LCID が必要である。これは Windows® で認識される有効な LCID の場合もあれば、認識されない LCID の場合もある。(ホスト システムが、フォント、キーボード マッピングなどで実際にロケールをサポートしている必要はない。)次の表に、一般的な LCID および、あまり一般的でない LCID (Windows がデフォルトでは認識しないにも関わらず MSWebDVD に対して有効) を示す。これは、使用できる LCID の完全なリストではない。Windows が認識する LCID の完全なリストなど、LCID の詳細については、MSDN オンライン ドキュメント (http://msdn.microsoft.com) を参照すること。
有効な LCID の一部 | |||||
---|---|---|---|---|---|
アフリカーンス語 | 0x0436 | アルバニア語 | 0x041c | アラビア語 (アルジェリア) | 0x1401 |
アラビア語 (バーレーン) | 0x3c01 | アラビア語 (エジプト) | 0x0c01 | アラビア語 (イラク) | 0x0801 |
アラビア語 (ヨルダン) | 0x2c01 | アラビア語 (クエート) | 0x3401 | アラビア語 (レバノン) | 0x3001 |
アラビア語 (リビア) | 0x1001 | アラビア語 (モロッコ) | 0x1801 | アラビア語 (オマーン) | 0x2001 |
アラビア語 (カタール) | 0x4001 | アラビア語 (サウジアラビア) | 0x0401 | アラビア語 (シリア) | 0x2801 |
アラビア語 (チュニジア) | 0x1c01 | アラビア語 (アラブ首長国連邦) | 0x3801 | アラビア語 (イエメン) | 0x2401 |
バスク語 | 0x042d | ベラルーシ語 | 0x0423 | ブルガリア語 | 0x0402 |
カタロニア語 | 0x0403 | 中国語 (香港) | 0x0c04 | 中国語 (中華人民共和国) | 0x0804 |
中国語 (シンガポール) | 0x1004 | 中国語 (台湾) | 0x0404 | クロアチア語 | 0x041a |
チェコ語 | 0x0405 | デンマーク語 | 0x0406 | オランダ語 (ベルギー) | 0x0813 |
オランダ語 (標準) | 0x0413 | 英語 (オーストラリア) | 0x0c09 | 英語 (ベリーズ) | 0x2809 |
英語 (カナダ) | 0x1009 | 英語 (カリブ) | 0x2409 | 英語 (アイルランド) | 0x1809 |
英語 (ジャマイカ) | 0x2009 | 英語 (ニュージーランド) | 0x1409 | 英語 (南アフリカ共和国) | 0x1c09 |
英語 (トリニダード) | 0x2c09 | 英語 (イギリス) | 0x0809 | 英語 (アメリカ) | 0x0409 |
エストニア語 | 0x0425 | フェロー語 | 0x0438 | ペルシア語 | 0x0429 |
フィンランド語 | 0x040b | フランス語 (ベルギー) | 0x080c | フランス語 (カナダ) | 0x0c0c |
フランス語 (ルクセンブルク) | 0x140c | フランス語 (標準) | 0x040c | フランス語 (スイス) | 0x100c |
ドイツ語 (オーストリア) | 0x0c07 | ドイツ語 (リヒテンシュタイン) | 0x1407 | ドイツ語 (ルクセンブルク) | 0x1007 |
ドイツ語 (標準) | 0x0407 | ドイツ語 (スイス) | 0x0807 | ギリシャ語 | 0x0408 |
ヘブライ語 | 0x040d | ハンガリー語 | 0x040e | アイスランド語 | 0x040f |
インドネシア語 | 0x0421 | イタリア語 (標準) | 0x0410 | イタリア語 (スイス) | 0x0810 |
日本語 | 0x0411 | 韓国語 | 0x0412 | 韓国語 (Johab) | 0x0812 |
ラトヴィア語 | 0x0426 | リトアニア語 | 0x0427 | マレー語 (マレーシア) | 0x043e |
マレー語 (ブルネイ) | 0x083e | ノルウェー語 (ブークモール) | 0x0414 | ノルウェー語 (ニーノシク) | 0x0814 |
ポーランド語 | 0x0415 | ポルトガル語 (ブラジル) | 0x0416 | ポルトガル語 (標準) | 0x0816 |
ルーマニア語 | 0x0418 | ロシア語 | 0x0419 | セルビア語 (キリル) | 0x0c1a |
セルビア語 (ラテン) | 0x081a | スロバキア語 | 0x041b | スロヴェニア語 | 0x0424 |
スペイン語 (アルゼンチン) | 0x2c0a | スペイン語 (ボリビア) | 0x400a | スペイン語 (チリ) | 0x340a |
Spanish (Colombia)スペイン語 (コロンビア) | 0x240a | スペイン語 (コスタリカ) | 0x140a | スペイン語 (ドミニカ共和国) | 0x1c0a |
スペイン語 (エクアドル) | 0x300a | スペイン語 (エルサルバドル) | 0x440a | スペイン語 (グアテマラ) | 0x100a |
スペイン語 (ホンジュラス) | 0x480a | スペイン語 (メキシコ) | 0x080a | スペイン語 (現代) | 0x0c0a |
スペイン語 (ニカラグア) | 0x4c0a | スペイン語 (パナマ) | 0x180a | スペイン語 (パラグアイ) | 0x3c0a |
スペイン語 (ペルー) | 0x280a | スペイン語 (プエルトリコ) | 0x500a | スペイン語 (旧来) | 0x040a |
スペイン語 (ウルグアイ) | 0x380a | スペイン語 (ベネズエラ) | 0x200a | スワヒリ語 | 0x0441 |
スウェーデン語 | 0x041d | スウェーデン語 (フィンランド) | 0x081d | タイ語 | 0x041e |
トルコ語 | 0x041f | ウクライナ語 | 0x0422 |
いくつかの MSWebDVD メソッドおよびプロパティは、サウンドトラックまたは字幕で利用できる言語を示すロケール識別子 (LCID) 値を返す。この情報を利用するには、アプリケーションによって、返された LCID からプライマリ言語 ID を抽出する必要がある。そのためには、iLCID の値と 0x3FF の間でビットごとの AND 演算を実行する。 (プライマリ言語 ID は、LCID の最下位の 10 ビットに含まれている。)次のコード例により、その方法を示す。
iPrimaryLang = iLCID & 0x3FF;
プライマリ言語 ID から、人間が読める文字列を取得するには、次の例のように GetLangFromLangID を呼び出す。
sLanguage = DVD.GetLangFromLangID(iPrimaryLang);
LCID および言語の識別子の詳細については、Microsoft® Platform SDK を参照すること。
次の表に、前の表の LCID に対するプライマリ言語 ID を示す。
有効なプライマリ言語 ID の一部 | |||||||
---|---|---|---|---|---|---|---|
アフリカーンス語 | 0x36 | アルバニア語 | 0x1c | アラビア語 | 0x01 | バスク語 | 0x2d |
ベラルーシ語 | 0x23 | ブルガリア語 | 0x02 | カタロニア語 | 0x03 | 中国語 | 0x04 |
クロアチア語 | 0x1a | チェコ語 | 0x05 | デンマーク語 | 0x06 | オランダ語 | 0x13 |
英語 | 0x09 | エストニア語 | 0x25 | フェロー語 | 0x38 | ペルシア語 | 0x29 |
フィンランド語 | 0x0b | フランス語 | 0x0c | ドイツ語 | 0x07 | ギリシャ語 | 0x08 |
ヘブライ語 | 0x0d | ハンガリー語 | 0x0e | アイスランド語 | 0x0f | インドネシア語 | 0x21 |
イタリア語 | 0x10 | 日本語 | 0x11 | 韓国語 | 0x12 | ラトヴィア語 | 0x26 |
リトアニア語 | 0x27 | マレー語 | 0x3e | ノルウェー語 | 0x14 | ポーランド語 | 0x15 |
ポルトガル語 | 0x16 | ルーマニア語 | 0x18 | ロシア語 | 0x19 | セルビア語 | 0x1a |
スロバキア語 | 0x1b | スロヴェニア語 | 0x24 | スペイン語 | 0x0a | スワヒリ語 | 0x41 |
スウェーデン語 | 0x1d | タイ語 | 0x1e | トルコ語 | 0x1f | ウクライナ語 | 0x22 |
カラオケ ディスクは DVD-Video ディスクの 一種であり、同じ操作構造を持っている。曲は一般にタイトルとしてフォーマットされ、タイトルは演奏者や音楽スタイルなどの条件に基づいてタイトル セットにグループ化できる。カラオケと他の種類の DVD-Video との主な違いはオーディオ ストリームである。すべてのカラオケ ディスクには、マルチチャンネル オーディオ (通常は Dolby AC-3) が含まれている。チャンネル 0 および 1 には常にバックグラウンドの演奏が含まれ、チャンネル 2 〜 5 にはそれぞれガイド ボーカル、ガイド メロディ、サウンド エフェクトを含むことができる。カラオケ アプリケーションは、各補助チャンネルについてボリュームと出力先スピーカを制御できる。
カラオケの再生には、DVD ナビゲータから送信されるマルチチャンネル カラオケ ミキシング情報をサポートするデコーダも必要である。具体的に言えば、このデコーダは DVD カラオケ プロパティ セット (AM_KSPROPSETID_DvdKaraoke) をサポートする必要がある。
DVD ナビゲータはディスク上にカラオケ コンテンツを検出してカラオケ モードに入ると、デコーダにそれを通知し、デコーダはアプリケーションによって明示的にオンにされるまで上位 3 つのチャンネル (補助チャンネル) を無音状態にする。カラオケ アプリケーションの基本的な動作は次のとおりである。
DVD ディスク、特にカラオケ ディスクには、ビデオまたはオーディオ コンテンツを補足するテキスト情報のデータベースが含まれている場合がある。カラオケ ディスク上のそのようなテキストとしては、曲名、アーティスト名、レコード レーベルなどがある。このテキストは、複数の言語で存在することができる。このような文字列はオプションであり、ディスク上に必ず含めなければならないわけではない。文字列が含まれる場合は、DVD ボリュームの論理的な階層を厳密に反映するように構成される。各文字列の前には、その文字列がディスク構造のどの部分に属するかを識別し、文字列の内容の手がかりとなるような数字が付加される。
テキスト文字列には、基本的な型として構造識別子と内容文字列の 2 つがある。0x01 〜 0x20 の値を持つ型が構造識別子である。これは空の文字列であり、数値コードはその後に続く内容文字列が属する論理構造を識別するために使用される。この構造は、DVD ディスクの内容 (ボリューム、タイトル、チャプターなど) の論理構造とかなり厳密に対応している。もう一方の型は、ユーザー インターフェイスで視聴者に表示される情報を保持する内容文字列を識別する。内容文字列の使用方法は厳密に定義されていないため、DVD 作成者はさまざまな方法でそれを使用できる。
これまで、DVD テキスト文字列はほとんどカラオケ ディスク専用に使用されてきた。これらのディスクは、ほとんどの場合、0x01 と 0x02 の構造識別子と 0x30 の内容文字列を使用している。しかし、時がたつにつれて、より多くの種類の DVD-Video ディスクにテキスト文字列が含まれるようになると考えるのが妥当である。これらの文字列は、より複雑に構成され、ディスクの内容の詳細な記述を提供するようになるであろう。
次のコードにより、ディスク上のテキスト文字列の言語ブロックの数を確認する方法、およびユーザーが言語を選択できるように表示するための人間が読める文字列を取得する方法を示す。このコードでは、文字列は "TextLanguageList" と呼ばれる HTML SELECT 要素に追加される。LCID およびプライマリ言語の詳細については、「GetLangFromLangID」を参照すること。
function GetTextLanguages() { //テキスト ブロックの数を取得する。 var numLangs = DVD.GetDVDTextNumberOfLanguages(); var iLCID; var iPrimaryLang; var sLanguage; var oOption; for (j = 0; j < numLangs; j++) { //言語ブロックに対するロケール識別子を取得する iLCID = DVD.GetDVDTextLanguageLCID(j); //LCID からプライマリ言語 ID を取得する iPrimaryLang = iLCID & 0x3FF; //プライマリ言語 ID から、人間が読める文字列を取得する sLanguage = DVD.GetLangFromLangID(iPrimaryLang); //HTML ページ上の SELECT 要素に追加する oOption = document.createElement("OPTION"); oOption.text = sLanguage; document.all.TextLanguageList.add(oOption); } } //関数 GetTextStrings の終わり
次のテスト コードは、文字列を列挙してテキスト文字列の型を検査する方法を示している。ここでは、数値文字列の型をどのように使用して内容文字列を編成するのかを理解する目的で、単に結果を "myTextArea" と呼ばれる HTML TEXTAREA 要素にダンプしている。実際のアプリケーションでは独自のデータ構造を作成して文字列を保持するか、または視聴者にとって便利な方法で文字列を表示する。
// iLanguage は、言語ブロックに対する 0 から始まるインデックスである function GetTextStrings(iLanguage) { var numStrings, stringType, j; numStrings = DVD.GetDVDTextNumberOfStrings(iLanguage); for( j = 0; j < numStrings; j++) { stringType = DVD.GetDVDTextStringType(iLanguage, j); if(stringType > 0x20) //実際にはここで何らかのテキストを読み込む { myTextArea.value += (stringType + ": " + DVD.GetDVDTextString(iLanguage, j) + "\n"); } else // ボリューム構造のレベルを示すノードである // 次の文字列を適用する { myTextArea.value += (stringType + "\n"); } } } //関数 GetTextStrings の終わり
次の表に、DVD テキスト文字列の型のサブセットの一覧を示す。値が 0x20 以下のすべての型は空の文字列であり、ディスクのコンテンツ データ構造におけるノード レベルを示すだけである。その他の文字列は、内容文字列である。ほとんどのタイトルおよび曲名の型は 0x30 である。Title、 SubTitle、および Original カテゴリ内の型によって、特定のジャンルを詳細に識別できる。これらのカテゴリの正確な意味と使用目的は公開文書に定義されており、DVD フォーラムの Web サイト (www.dvdforum.org) からダウンロードできる。
構造識別子 | ||
---|---|---|
Volume | 0x01 | 後に続く文字列が DVD ボリュームに関係することを示す。 |
Title | 0x02 | 後に続く文字列が タイトルに関係することを示す。 |
ParentalID | 0x03 | 後に続く文字列が 特定のペアレンタル ID に関係することを示す。 |
Chapter | 0x04 | 後に続く文字列がチャプターに関係することを示す。 |
Cell | 0x05 | 後に続く文字列がセル (一般にムービーの 1 シーン) に関係することを示す。 |
ストリーム識別子 | ||
Audio | 0x10 | 後に続く文字列がオーディオストリームに関係することを示す。 |
Subpicture | 0x11 | 後に続く文字列がサブピクチャ ストリームに関係することを示す。 |
Angle | 0x12 | 後に続く文字列がアングル ブロックに関係することを示す。 |
オーディオ チャンネル識別子 | ||
Channel | 0x20 | 後に続く文字列がオーディオ ストリームの 1 つのチャンネルに関係することを示す。 |
一般的な内容文字列 | ||
Name | 0x30 | タイトル名、チャプター名、曲名などに対する最も一般的な識別子。 |
Comments | 0x31 | タイトル、チャプター、曲に関する一般的なコメント。 |
タイトル内容文字列 | ||
Series | 0x38 | タイトル、チャプター、曲などに関する追加情報。 |
Movie | 0x39 | ムービーの場合のタイトルまたはチャプターに関する追加情報。 |
Video | 0x3a | ビデオの場合のタイトルまたはチャプターに関する追加情報。 |
Album | 0x3b | アルバムの場合のタイトルまたはチャプターに関する追加情報。 |
Song | 0x3c | 曲の場合のタイトルまたはチャプターに関する追加情報。 |
Other | 0x3f | 他のジャンルまたはカテゴリーに属する場合のタイトルまたはチャプターに関する追加情報。 |
二次タイトル内容文字列 | ||
Series | 0x40 | タイトル、チャプター、曲などに関する追加情報。 |
Movie | 0x41 | ムービーの場合のタイトルまたはチャプターに関する追加情報。 |
Video | 0x42 | ビデオの場合のタイトルまたはチャプターに関する追加情報。 |
Album | 0x43 | アルバムの場合のタイトルまたはチャプターに関する追加情報。 |
Song | 0x44 | 曲の場合のタイトルまたはチャプターに関する追加情報。 |
Other | 0x45 | 他のジャンルまたはカテゴリーに属する場合のタイトルまたはチャプターに関する追加情報。 |
オリジナル内容文字列 | ||
Series | 0x48 | タイトル、チャプター、曲などに関する追加情報。 |
Movie | 0x49 | ムービーの場合のタイトルまたはチャプターに関する追加情報。 |
Video | 0x4a | ビデオの場合のタイトルまたはチャプターに関する追加情報。 |
Album | 0x4b | アルバムの場合のタイトルまたはチャプターに関する追加情報。 |
Song | 0x4c | 曲の場合のタイトルまたはチャプターに関する追加情報。 |
Other | 0x4f | 他のジャンルまたはカテゴリーに属する場合のタイトルまたはチャプターに関する追加情報。 |
その他の情報内容文字列 | ||
Other Scene | 0x50 | ムービーのタイトルまたはチャプターにおける代わりのシーンに関する追加情報。 |
Other Cut | 0x51 | ムービーのタイトルまたはチャプターにおける代わりのカットに関する追加情報。 |
Other Take | 0x52 | ムービーのタイトルまたはチャプターにおける代わりのテイクに関する追加情報。 |