デバイスを開く
デバイスを使用する前に、 open (MCI_OPEN) コマンドを使用してデバイスを初期化する必要があります。 このコマンドは、ドライバーをメモリに読み込み (まだ読み込まれていない場合)、後続の MCI コマンドでデバイスを識別するために使用するデバイス識別子を取得します。 新しいデバイス識別子を使用して識別子が有効であることを確認する前に、mciSendString または mciSendCommand 関数の戻り値をチェックする必要があります。 ( mciGetDeviceID 関数を使用してデバイス識別子を取得することもできます)。
すべての MCI コマンド メッセージと同様に、 MCI_OPEN には関連付けられた構造があります。 これらの構造体は、 パラメーター ブロックと呼ばれることもあります。 MCI_OPENの既定の構造体はMCI_OPEN_PARMS。 特定のデバイス ( 波形 や オーバーレイなど) には、追加の省略可能なパラメーターに対応するために拡張構造 ( MCI_WAVE_OPEN_PARMS や MCI_OVLY_OPEN_PARMSなど) があります。 これらの追加パラメーターを使用する必要がない限り、任意の MCI デバイスで MCI_OPEN_PARMS 構造を使用できます。
開くことができるデバイスの数は、使用可能なメモリの量によってのみ制限されます。
エイリアスの使用
デバイスを開くと、"alias" フラグを使用してデバイスのデバイス識別子を指定できます。 このフラグを使用すると、長いファイル名を持つ複合デバイスの短いデバイス識別子を割り当て、同じファイルまたはデバイスの複数のインスタンスを開くことができます。
たとえば、次のコマンドは、デバイス識別子 "birdcall" を長いファイル名 C:\NABIRDS\SOUNDS\MOCKMTNG に割り当てます。Wav:
mciSendString(
"open c:\nabirds\sounds\mockmtng.wav type waveaudio alias birdcall",
lpszReturnString, lstrlen(lpszReturnString), NULL);
コマンド メッセージ インターフェイスでは、MCI_OPEN_PARMS構造体の lpstrAlias メンバーを使用してエイリアスを指定します。
デバイスの種類の指定
デバイスを開くときに、"type" フラグを使用して、特定のデバイス ドライバーではなく、デバイスの種類を参照できます。 次の例では、波形オーディオ ファイル C:\WINDOWS\CHIMES を開きます。WAV ("type" フラグを使用して waveaudio デバイスの種類を指定) し、エイリアス "chimes" を割り当てます。
mciSendString(
"open c:\windows\chimes.wav type waveaudio alias chimes",
lpszReturnString, lstrlen(lpszReturnString), NULL);
コマンド メッセージ インターフェイスでは、"type" フラグの機能は、MCI_OPEN_PARMS構造体の lpstrDeviceType メンバーによって提供されます。
簡易デバイスと複合デバイス
MCI は、デバイス ドライバーを 複合 または 単純として分類します。 複合デバイスのドライバーでは、再生のためにデータ ファイルの名前が必要です。単純なデバイス用のドライバーはしません。
単純なデバイスには、 cdaudio デバイスと videodisc デバイスが含まれます。 単純なデバイスを開くには、次の 2 つの方法があります。
レジストリまたはSYSTEM.INI ファイルのデバイス名を含む null で終わる文字列へのポインターを指定します。
たとえば、次のコマンドを使用して videodisc デバイスを開くことができます。
mciSendString("open videodisc", lpszReturnString,
lstrlen(lpszReturnString), NULL);
この場合、"videodisc" はレジストリのデバイス名、または SYSTEM.INI の [mci] セクションのデバイス名です。
- デバイス ドライバーの実際の名前を指定します。 ただし、デバイス ドライバーファイル名を使用してデバイスを開くと、アプリケーションはデバイス固有になり、システム構成が変更された場合にアプリケーションが実行できなくなる可能性があります。 ファイル名を使用する場合は、完全なパスまたはファイル名拡張子を指定する必要はありません。MCI は、ドライバーがシステム ディレクトリにあり、 があることを前提としています。DRV ファイル名拡張子。
複合デバイスには、 waveaudio デバイスと シーケンサー デバイスが 含まれます。 複合デバイスのデータは、 デバイス要素と呼ばれることもあります。 ただし、このドキュメントでは、データがファイルとして格納されない場合がある場合でも、一般にこのデータをファイルと見なします。
複合デバイスを開くには、次の 3 つの方法があります。
- デバイス名のみを指定します。 これにより、ファイル名を関連付けずに複合デバイスを開くことができます。 ほとんどの複合デバイスでは、この方法で開かれた 機能 (MCI_GETDEVCAPS) コマンドと close (MCI_CLOSE) コマンドのみが処理されます。
- ファイル名のみを指定します。 デバイス名は、レジストリ内の関連付けから決定されます。
- ファイル名とデバイス名を指定します。 MCI はレジストリ内のエントリを無視し、指定されたデバイス名を開きます。
データ ファイルを特定のデバイスに関連付けるには、ファイル名とデバイス名を指定します。 たとえば、次のコマンドは、ファイル名 MYVOICE を使用して waveaudio デバイスを開きます。Snd:
mciSendString("open myvoice.snd type waveaudio", lpszReturnString,
lstrlen(lpszReturnString), NULL);
コマンド文字列インターフェイスでは、 open コマンドで説明されているように、代替の感嘆符形式を使用して、デバイス名の指定を省略することもできます。
ファイル名拡張子を使用してデバイスを開く
open (MCI_OPEN) コマンドでファイル名のみが指定されている場合、MCI はファイル名拡張子を使用して、レジストリまたはSYSTEM.INI ファイルの [mci extensions] セクションの一覧から適切なデバイスを選択します。 [mci extensions] セクションのエントリは、次の形式を使用します。
= filename_extensiondevice_name
MCI は、 拡張機能が見つかった場合、および open コマンドでデバイス名が指定されていない場合は、device_nameを暗黙的に使用します。
次の例は、一般的な [mci extensions] セクションを示しています。
[mci extensions]
wav=waveaudio
mid=sequencer
rmi=sequencer
これらの定義を使用して、次のコマンドが発行されると、MCI によって waveaudio デバイスが開かれます。
mciSendString("open train.wav", lpszReturnString,
lstrlen(lpszReturnString), NULL);
新しいデータ ファイル
新しいデータ ファイルを作成するには、空白のファイル名を指定するだけです。 MCI は、save (MCI_SAVE) コマンドを使用して保存するまで、新しいファイルを保存しません。 新しいファイルを作成するときは、 open (MCI_OPEN) コマンドでデバイス エイリアスを含める必要があります。
次の例では、新しい waveaudio ファイルを開き、記録を開始および停止してから、ファイルを保存して閉じます。
mciSendString("open new type waveaudio alias capture", lpszReturnString,
lstrlen(lpszReturnString), NULL);
mciSendString("record capture", lpszReturnString,
lstrlen(lpszReturnString), NULL);
mciSendString("stop capture", lpszReturnString,
lstrlen(lpszReturnString), NULL);
mciSendString("save capture orca.wav", lpszReturnString,
lstrlen(lpszReturnString), NULL);
mciSendString("close capture", lpszReturnString,
lstrlen(lpszReturnString), NULL);
共有可能なデバイス
開いている (MCI_OPEN) コマンドの "共有可能" (MCI_OPEN_SHAREABLE) フラグを使用すると、複数のアプリケーションが同じデバイス (またはファイル) とデバイス インスタンスに同時にアクセスできます。 アプリケーションが共有可能としてデバイスまたはファイルを開いた場合、他のアプリケーションも共有可能として開いてアクセスできます。 共有デバイスまたはファイルを使用すると、各アプリケーションで動作状態を制御するパラメーターを変更できます。 デバイスまたはファイルが共有可能として開かれるたびに、MCI は、識別子が同じインスタンスを参照している場合でも、一意のデバイス識別子を返します。
共有可能であることを指定せずにアプリケーションでデバイスまたはファイルを開いた場合、アプリケーションが閉じるまで他のアプリケーションはアクセスできません。 また、デバイスが 1 つのオープン インスタンスのみをサポートしている場合、共有可能フラグを指定すると 、open コマンドは失敗します。
アプリケーションがデバイスを開き、共有可能であることを指定した場合、アプリケーションは、このデバイスの状態について何も想定しないでください。 アプリケーションは、デバイスにアクセスする他のアプリケーションによって行われた変更を補正する必要がある場合があります。
ほとんどの複合ファイルは共有できません。ただし、複数のファイルを開くか、1 つのファイルを複数回開くことができます。 1 つのファイルを複数回開くと、MCI は各インスタンスに対して独立したインスタンスを作成し、各インスタンスは一意の動作状態になります。
ファイルの複数のインスタンスを開く場合は、それぞれに一意のデバイス識別子を割り当てる必要があります。 次のセクションで説明するように、エイリアスを使用して、各ファイルに一意の名前を割り当てることができます。