Share via


Apertura de un dispositivo

Antes de usar un dispositivo, debe inicializarlo mediante el comando open (MCI_OPEN). Este comando carga el controlador en la memoria (si aún no está cargado) y recupera el identificador de dispositivo que usará para identificar el dispositivo en los comandos de MCI posteriores. Debe comprobar el valor devuelto de la función mciSendString o mciSendCommand antes de usar un nuevo identificador de dispositivo para asegurarse de que el identificador es válido. (También puede recuperar un identificador de dispositivo mediante la función mciGetDeviceID ).

Al igual que todos los mensajes de comando de MCI, MCI_OPEN tiene una estructura asociada. Estas estructuras a veces se denominan bloques de parámetros. La estructura predeterminada de MCI_OPEN es MCI_OPEN_PARMS. Algunos dispositivos (como la forma de onda y la superposición) tienen estructuras extendidas (como MCI_WAVE_OPEN_PARMS y MCI_OVLY_OPEN_PARMS) para dar cabida a parámetros opcionales adicionales. A menos que necesite usar estos parámetros adicionales, puede usar la estructura MCI_OPEN_PARMS con cualquier dispositivo MCI.

El número de dispositivos que puede tener abierto solo está limitado por la cantidad de memoria disponible.

Uso de un alias

Al abrir un dispositivo, puede usar la marca "alias" para especificar un identificador de dispositivo para el dispositivo. Esta marca le permite asignar un identificador de dispositivo corto para dispositivos compuestos con nombres de archivo largos y le permite abrir varias instancias del mismo archivo o dispositivo.

Por ejemplo, el siguiente comando asigna el identificador de dispositivo "birdcall" al nombre de archivo largo C:\NABIRDS\SOUNDS\MOCKMTNG. WAV:

mciSendString(
    "open c:\nabirds\sounds\mockmtng.wav type waveaudio alias birdcall", 
    lpszReturnString, lstrlen(lpszReturnString), NULL);

En la interfaz de mensaje de comandos, especifique un alias mediante el miembro lpstrAlias de la estructura MCI_OPEN_PARMS .

Especificar un tipo de dispositivo

Al abrir un dispositivo, puede usar la marca "type" para hacer referencia a un tipo de dispositivo, en lugar de a un controlador de dispositivo específico. En el ejemplo siguiente se abre el archivo de audio de forma de onda C:\WINDOWS\CHIMES. WAV (con la marca "type" para especificar el tipo de dispositivo waveaudio ) y asigna el alias "chimes":

mciSendString(
    "open c:\windows\chimes.wav type waveaudio alias chimes", 
    lpszReturnString, lstrlen(lpszReturnString), NULL);

En la interfaz de mensaje de comandos, el miembro lpstrDeviceType de la estructura MCI_OPEN_PARMS proporciona la funcionalidad de la marca "type".

Dispositivos simples y compuestos

MCI clasifica los controladores de dispositivos como compuestos o simples. Los controladores para dispositivos compuestos requieren el nombre de un archivo de datos para la reproducción; los controladores para dispositivos simples no.

Entre los dispositivos sencillos se incluyen cdaudio y dispositivos videodisc . Hay dos maneras de abrir dispositivos simples:

  • Especifique un puntero a una cadena terminada en null que contenga el nombre del dispositivo del registro o el archivo SYSTEM.INI.

    Por ejemplo, puede abrir un dispositivo videodisc mediante el siguiente comando:

    mciSendString("open videodisc", lpszReturnString, 
        lstrlen(lpszReturnString), NULL);

En este caso, "videodisc" es el nombre del dispositivo del registro o la sección [mci] de SYSTEM.INI.

  • Especifique el nombre real del controlador de dispositivo. Sin embargo, abrir un dispositivo con el nombre de archivo device-driver hace que la aplicación sea específica del dispositivo y puede impedir que la aplicación se ejecute si cambia la configuración del sistema. Si usa un nombre de archivo, no es necesario especificar la ruta de acceso completa ni la extensión de nombre de archivo; MCI supone que los controladores se encuentran en un directorio del sistema y tienen . Extensión de nombre de archivo DRV.

Los dispositivos compuestos incluyen waveaudio y dispositivos secuenciador . Los datos de un dispositivo compuesto a veces se denominan elemento device. Sin embargo, este documento normalmente hace referencia a estos datos como un archivo, aunque en algunos casos los datos podrían no almacenarse como un archivo.

Hay tres maneras de abrir un dispositivo compuesto:

  • Especifique solo el nombre del dispositivo. Esto le permite abrir un dispositivo compuesto sin asociar un nombre de archivo. La mayoría de los dispositivos compuestos solo procesan la funcionalidad (MCI_GETDEVCAPS) y cierran (MCI_CLOSE) comandos cuando se abren de esta manera.
  • Especifique solo el nombre de archivo. El nombre del dispositivo se determina a partir de las asociaciones del registro.
  • Especifique el nombre de archivo y el nombre del dispositivo. MCI omite las entradas del Registro y abre el nombre de dispositivo especificado.

Para asociar un archivo de datos a un dispositivo determinado, puede especificar el nombre de archivo y el nombre del dispositivo. Por ejemplo, el siguiente comando abre el dispositivo waveaudio con el nombre de archivo MYVOICE. SND:

mciSendString("open myvoice.snd type waveaudio", lpszReturnString, 
    lstrlen(lpszReturnString), NULL);

En la interfaz de cadena de comandos, también puede abreviar la especificación del nombre del dispositivo mediante el formato alternativo de signo de exclamación, como se documenta con el comando open .

Abrir un dispositivo mediante la extensión de nombre de archivo

Si el comando abrir (MCI_OPEN) especifica solo el nombre de archivo, MCI usa la extensión de nombre de archivo para seleccionar el dispositivo adecuado de la lista del Registro o la sección [mci extensions] del archivo SYSTEM.INI. Las entradas de la sección [extensiones mci] usan el siguiente formato:

= filename_extension Nombre_dispositivo

MCI usa implícitamente device_name si se encuentra la extensión y si no se ha especificado un nombre de dispositivo en el comando open .

En el ejemplo siguiente se muestra una sección típica de [extensiones mci]:

[mci extensions]
wav=waveaudio
mid=sequencer
rmi=sequencer

Con estas definiciones, MCI abre el dispositivo waveaudio si se emite el siguiente comando:

mciSendString("open train.wav", lpszReturnString, 
    lstrlen(lpszReturnString), NULL);

Nuevos archivos de datos

Para crear un nuevo archivo de datos, simplemente especifique un nombre de archivo en blanco. MCI no guarda un nuevo archivo hasta que lo guarde mediante el comando save (MCI_SAVE). Al crear un nuevo archivo, debe incluir un alias de dispositivo con el comando open (MCI_OPEN).

En el ejemplo siguiente se abre un nuevo archivo waveaudio , se inicia y se detiene la grabación y, a continuación, se guarda y cierra el archivo:

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);

Dispositivos que se pueden compartir

La marca "sharable" (MCI_OPEN_SHAREABLE) del comando open (MCI_OPEN) permite que varias aplicaciones accedan al mismo dispositivo (o archivo) y a la instancia del dispositivo simultáneamente. Si la aplicación abre un dispositivo o archivo como que se puede compartir, otras aplicaciones también pueden acceder a él abriendolo como compartible. El dispositivo o archivo compartidos ofrece a cada aplicación la capacidad de cambiar los parámetros que rigen su estado operativo. Cada vez que se abre un dispositivo o archivo como compartible, MCI devuelve un identificador de dispositivo único, aunque los identificadores hacen referencia a la misma instancia.

Si la aplicación abre un dispositivo o archivo sin especificar que se puede compartir, ninguna otra aplicación puede acceder a él hasta que la aplicación la cierre. Además, si un dispositivo solo admite una instancia abierta, se producirá un error en el comando open si especifica la marca que se puede compartir.

Si la aplicación abre un dispositivo y especifica que se puede compartir, la aplicación no debe realizar ninguna suposición sobre el estado de este dispositivo. Es posible que la aplicación tenga que compensar los cambios realizados por otras aplicaciones que acceden al dispositivo.

La mayoría de los archivos compuestos no son compartibles; Sin embargo, puede abrir varios archivos o puede abrir un único archivo varias veces. Si abre un único archivo varias veces, MCI crea una instancia independiente para cada uno, con cada instancia con un estado operativo único.

Si abre varias instancias de un archivo, debe asignar un identificador de dispositivo único a cada uno. Puede usar un alias, como se describe en la sección siguiente, para asignar un nombre único para cada archivo.