デバイスの再生

play (MCI_PLAY) コマンドがデバイスの再生を開始します。 フラグがない場合、このコマンドは現在の位置から再生を開始し、コマンドが中断されるまで、またはメディアまたはファイルの末尾に達するまで再生されます。 再生後、現在の位置はメディアの末尾にあります。 seek (MCI_SEEK) コマンドを使用して、現在位置を変更することもできます。

play コマンドをサポートするほとんどのデバイスでは、"from" (MCI_FROM) フラグと "to" (MCI_TO) フラグもサポートされています。 これらのフラグは、デバイスが再生を開始および停止する位置を示します。 たとえば、次のコマンドは 、mciSendString 関数を使用して、最初のトラックの先頭から CD オーディオ ディスクを再生します。

mciSendString("play cdaudio from 0", lpszReturnString, 
    lstrlen(lpszReturnString), NULL);

一部のデバイスの種類では、このコマンドを拡張して、特定のデバイスの機能を利用します。 たとえば、videodisc デバイスの種類の再生コマンドには、"fast" (MCI_VD_PLAY_FAST) 、"slow" (MCI_VD_PLAY_SLOW)、"scan" (MCI_VD_PLAY_SCAN) フラグが含まれます。

注意

位置の値に割り当てられる単位は、デバイスで使用される時間形式によって異なります。 各デバイスには既定の時刻形式がありますが、位置値を使用するコマンドを発行する前に set (MCI_SET) コマンドを使用して時刻形式を指定する必要があります。

 

AVI ファイルの再生

Windows のビデオ ファイルは、少なくとも 2 つのインターリーブされたデータ ストリーム (ビデオ (画像) ストリームとオーディオ ストリーム) で構成されています。 MCI コマンドを使用すると、これらのオーディオ ビデオ インターリーブ (AVI) ファイルを簡単に再生できます。 次のセクションでは、AVI ファイルの再生について説明します。

MCIAVI 再生ウィンドウの設定

アプリケーションでは、次のオプションを指定して、AVI ファイルを再生するための再生ウィンドウを定義できます。

  • MCIAVI ドライバーの既定のポップアップ ウィンドウを使用します。
  • MCIAVI ドライバーが再生ウィンドウの作成に使用できる親ウィンドウとウィンドウ スタイルを指定します。
  • 再生に使用する MCIAVI ドライバーの再生ウィンドウを指定します。
  • 全画面表示で AVI ファイルを再生します。

アプリケーションでウィンドウ オプションが指定されていない場合、MCIAVI ドライバーはシーケンスを再生するための既定のウィンドウを作成します。 ドライバーは 、開いている (MCI_OPEN) コマンドのこの再生ウィンドウを作成しますが、アプリケーションがウィンドウを表示するかファイルを再生するコマンドを送信するまで、ウィンドウは表示されません。 この既定の再生ウィンドウは、サイズ変更の境界線、タイトル バー、太いフレーム、 ウィンドウ メニュー、最小化ボタンを含むポップアップ ウィンドウです。

アプリケーションでは、 開いている コマンドを発行するときに、親ウィンドウ ハンドルとウィンドウ スタイルを指定することもできます。 この場合、MCIAVI ドライバーは、既定のポップアップ ウィンドウではなく、これらの仕様に基づいてウィンドウを作成します。 アプリケーションでは、 CreateWindow 関数で使用できる任意のウィンドウ スタイルを指定できます。 WS_CHILDなどの親ウィンドウを必要とするスタイルには、親ウィンドウ ハンドルを含める必要があります。

アプリケーションでは、独自のウィンドウを作成し、ウィンドウ (MCI_WINDOW) コマンドを使用して MCIAVI ドライバーにハンドルを指定することもできます。 MCIAVI ドライバーは、独自のウィンドウを作成する代わりに、このウィンドウを使用します。

MCIAVI ドライバーは、再生ウィンドウを作成するか、アプリケーションからウィンドウ ハンドルを取得すると、アプリケーションがシーケンスを再生するか、ウィンドウを表示するコマンドを送信するまで、ウィンドウを表示しません。 アプリケーションでは、 ウィンドウ コマンドを使用して、シーケンスを再生せずにウィンドウを表示できます。 たとえば、次のコマンドは 、mciSendString を使用してウィンドウを表示します。

mciSendString("window movie state show", lpszReturnString,
    lstrlen(lpszReturnString), NULL);

この例では、"movie" はデジタル ビデオ デバイスのエイリアスです。

アプリケーションでは、AVI ファイルを全画面表示で再生することもできます。 全画面表示を再生するには、"全画面表示" (MCI_MCIAVI_PLAY_FULLSCREEN) フラグを使用して再生 (MCI_PLAY) コマンドを変更します。 アプリケーションでこのフラグが使用されている場合、MCIAVI ドライバーはシーケンスを再生するために 320 x 240 ピクセルの全画面表示形式を使用します。 たとえば、次のコマンドは、開いているファイルを全画面表示で再生します (別名として "movie" を使用)。

mciSendString("play movie fullscreen", lpszReturnString,
    lstrlen(lpszReturnString), NULL);

AVI ファイルの再生状態の変更

アプリケーションは seek (MCI_SEEK) コマンドを使用して、現在位置を AVI ファイルの先頭、末尾、または任意の位置に移動できます。 MCIAVI ドライバーには 2 つのシーク モードがあります。正確と不正確です。 アプリケーションでは、 set (MCI_SET) コマンドを使用してシーク モード変更できます。 set "seek exactly on" を使用すると、MCIAVI ドライバーは、アプリケーションが指定したフレームに正確にシークします。 これにより、ファイルが一時的に圧縮され、アプリケーションでキー フレームが指定されていない場合、遅延が発生する可能性があります。 set "seek exactly off" を使用すると、MCIAVI ドライバーはテンポラル圧縮ファイル内の最も近いキー フレームをシークします。

一部の MCI コマンドでは、アプリケーションで AVI ファイルの再生を他の方法で変更できます。 たとえば、AVI ファイルは既定では通常の速度で再生されますが、アプリケーションでは set コマンドで "speed" フラグを使用することで、この速度を増減できます。 AVI ファイルの場合、速度値 1000 が一般的です。 したがって、通常の速度の半分でムービーを再生するには、アプリケーションでコマンド セット "movie speed 500" を使用できます。または、シーケンスを通常の速度の 2 倍で再生するには、 設定 された "ムービー速度 2000" を使用できます。

setaudio (MCI_SETAUDIO) コマンドを使用すると、アプリケーションで AVI ファイルのオーディオ部分を制御できます。 アプリケーションでは、再生中にオーディオをミュートしたり、複数のオーディオ ストリーム ファイルの場合は、再生されるオーディオ ストリームを選択したりできます。

MCIAVI ドライバーには、再生オプションの一部を制御するダイアログ ボックスがあります。 ユーザーが使用できるオプションには、ウィンドウ指向または全画面表示再生の選択、シーク モードの選択、画像のズームなどがあります。 アプリケーションでは、 構成 (MCI_CONFIGURE) コマンドを使用して MCIAVI にこのダイアログ ボックスを表示させることができます。

ストリーム ハンドラー

AVI ファイル内のデータは、一連のストリームとして扱われます。 AVI ファイルには通常、オーディオ ストリームとビデオ ストリームが含まれており、テキストやその他のカスタム データを含むカスタム ストリームが存在する場合もあります。 MCIAVI ドライバーでは、これらのデータ ストリームに異なるハンドラーを使用できます。 カスタム AVI ファイルの詳細については、「 カスタム ファイルとストリーム ハンドラー」を参照してください。