Abrindo um dispositivo

Antes de usar um dispositivo, você deve inicializá-lo usando o comando open (MCI_OPEN). Esse comando carrega o driver na memória (se ele ainda não estiver carregado) e recupera o identificador de dispositivo que você usará para identificar o dispositivo em comandos MCI subsequentes. Você deve marcar o valor retornado da função mciSendString ou mciSendCommand antes de usar um novo identificador de dispositivo para garantir que o identificador seja válido. (Você também pode recuperar um identificador de dispositivo usando a função mciGetDeviceID .)

Como todas as mensagens de comando MCI, MCI_OPEN tem uma estrutura associada. Essas estruturas às vezes são chamadas de blocos de parâmetro. A estrutura padrão para MCI_OPEN é MCI_OPEN_PARMS. Determinados dispositivos (como forma de onda e sobreposição) têm estruturas estendidas (como MCI_WAVE_OPEN_PARMS e MCI_OVLY_OPEN_PARMS) para acomodar parâmetros opcionais adicionais. A menos que você precise usar esses parâmetros adicionais, poderá usar a estrutura MCI_OPEN_PARMS com qualquer dispositivo MCI.

O número de dispositivos que você pode ter aberto é limitado apenas pela quantidade de memória disponível.

Usando um alias

Ao abrir um dispositivo, você pode usar o sinalizador "alias" para especificar um identificador de dispositivo para o dispositivo. Esse sinalizador permite atribuir um identificador de dispositivo curto para dispositivos compostos com nomes de arquivo longos e permite que você abra várias instâncias do mesmo arquivo ou dispositivo.

Por exemplo, o comando a seguir atribui o identificador de dispositivo "birdcall" ao nome de arquivo longo C:\NABIRDS\SOUNDS\MOCKMTNG. WAV:

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

Na interface de mensagem de comando, especifique um alias usando o membro lpstrAlias da estrutura MCI_OPEN_PARMS .

Especificando um tipo de dispositivo

Ao abrir um dispositivo, você pode usar o sinalizador "tipo" para se referir a um tipo de dispositivo, em vez de a um driver de dispositivo específico. O exemplo a seguir abre o arquivo de áudio de forma de onda C:\WINDOWS\CHIMES. WAV (usando o sinalizador "type" para especificar o tipo de dispositivo waveaudio ) e atribui o alias "chimes":

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

Na interface command-message, a funcionalidade do sinalizador "type" é fornecida pelo membro lpstrDeviceType da estrutura MCI_OPEN_PARMS .

Dispositivos simples e compostos

O MCI classifica os drivers de dispositivo como compostos ou simples. Os drivers para dispositivos compostos exigem o nome de um arquivo de dados para reprodução; drivers para dispositivos simples não.

Dispositivos simples incluem dispositivos cdaudio e videodisc . Há duas maneiras de abrir dispositivos simples:

  • Especifique um ponteiro para uma cadeia de caracteres terminada em nulo que contém o nome do dispositivo do registro ou o arquivo SYSTEM.INI.

    Por exemplo, você pode abrir um dispositivo videodisc usando o seguinte comando:

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

Nesse caso, "videodisc" é o nome do dispositivo do registro ou a seção [mci] do SYSTEM.INI.

  • Especifique o nome real do driver de dispositivo. No entanto, abrir um dispositivo usando o nome de arquivo do driver de dispositivo torna o dispositivo de aplicativo específico e pode impedir que o aplicativo seja executado se a configuração do sistema for alterada. Se você usar um nome de arquivo, não precisará especificar o caminho completo ou a extensão filename; O MCI pressupõe que os drivers estejam localizados em um diretório do sistema e tenham o . Extensão de nome de arquivo DRV.

Os dispositivos compostos incluem dispositivos waveaudio e sequencer . Os dados de um dispositivo composto às vezes são chamados de elemento de dispositivo. Este documento, no entanto, geralmente se refere a esses dados como um arquivo, embora, em alguns casos, os dados possam não ser armazenados como um arquivo.

Há três maneiras de abrir um dispositivo composto:

  • Especifique apenas o nome do dispositivo. Isso permite que você abra um dispositivo composto sem associar um nome de arquivo. A maioria dos dispositivos compostos processa apenas os comandos de funcionalidade (MCI_GETDEVCAPS) e fechamento (MCI_CLOSE) quando eles são abertos dessa maneira.
  • Especifique apenas o nome do arquivo. O nome do dispositivo é determinado a partir das associações no registro.
  • Especifique o nome do arquivo e o nome do dispositivo. O MCI ignora as entradas no registro e abre o nome do dispositivo especificado.

Para associar um arquivo de dados a um dispositivo específico, você pode especificar o nome do arquivo e o nome do dispositivo. Por exemplo, o comando a seguir abre o dispositivo waveaudio com o nome de arquivo MYVOICE. SND:

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

Na interface de cadeia de caracteres de comando, você também pode abreviar a especificação de nome do dispositivo usando o formato de ponto de exclamação alternativo, conforme documentado com o comando open .

Abrindo um dispositivo usando a extensão filename

Se o comando abrir (MCI_OPEN) especificar apenas o nome do arquivo, o MCI usará a extensão filename para selecionar o dispositivo apropriado na lista no registro ou na seção [extensões mci] do arquivo SYSTEM.INI. As entradas na seção [extensões mci] usam o seguinte formulário:

= filename_extension device_name

O MCI usará implicitamente device_name se a extensão for encontrada e se um nome de dispositivo não tiver sido especificado no comando open .

O exemplo a seguir mostra uma seção típica [extensões mci]:

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

Usando essas definições, o MCI abrirá o dispositivo waveaudio se o seguinte comando for emitido:

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

Novos arquivos de dados

Para criar um novo arquivo de dados, basta especificar um nome de arquivo em branco. O MCI não salva um novo arquivo até que você o salve usando o comando salvar (MCI_SAVE). Ao criar um novo arquivo, você deve incluir um alias de dispositivo com o comando open (MCI_OPEN).

O exemplo a seguir abre um novo arquivo waveaudio , inicia e interrompe a gravação, salva e fecha o arquivo:

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 compartilháveis

O sinalizador "sharable" (MCI_OPEN_SHAREABLE) do comando open (MCI_OPEN) permite que vários aplicativos acessem simultaneamente o mesmo dispositivo (ou arquivo) e a instância do dispositivo. Se o aplicativo abrir um dispositivo ou arquivo como compartilhável, outros aplicativos também poderão acessá-lo abrindo-o como compartilhável. O dispositivo ou arquivo compartilhado fornece a cada aplicativo a capacidade de alterar os parâmetros que regem seu estado operacional. Sempre que um dispositivo ou arquivo é aberto como compartilhável, o MCI retorna um identificador de dispositivo exclusivo, mesmo que os identificadores se refiram à mesma instância.

Se o aplicativo abrir um dispositivo ou arquivo sem especificar que ele é compartilhável, nenhum outro aplicativo poderá acessá-lo até que seu aplicativo o feche. Além disso, se um dispositivo der suporte a apenas uma instância aberta, o comando open falhará se você especificar o sinalizador compartilhável.

Se o aplicativo abrir um dispositivo e especificar que ele é compartilhável, seu aplicativo não deverá fazer nenhuma suposição sobre o estado deste dispositivo. Seu aplicativo pode precisar compensar as alterações feitas por outros aplicativos que acessam o dispositivo.

A maioria dos arquivos compostos não são compartilháveis; no entanto, você pode abrir vários arquivos ou abrir um único arquivo várias vezes. Se você abrir um único arquivo várias vezes, a MCI criará uma instância independente para cada uma delas, com cada instância tendo um status operacional exclusivo.

Se você abrir várias instâncias de um arquivo, deverá atribuir um identificador de dispositivo exclusivo a cada uma delas. Você pode usar um alias, conforme descrito na seção a seguir, para atribuir um nome exclusivo para cada arquivo.