Compartilhar via


Instalando interfaces de dispositivo para um adaptador de áudio

Um cliente acessa um dispositivo de áudio por meio de um conjunto de interfaces de dispositivo que um fornecedor especifica no arquivo INF do adaptador. As interfaces de dispositivo especificadas no arquivo INF têm uma correspondência um-para-um com os subdispositivos que o driver do adaptador cria quando inicializa o dispositivo (consulte Criação de subdispositivos). Para cada interface do dispositivo, o arquivo INF especifica um valor de entrada FriendlyName , que é acessível no modo de usuário, na chave do Registro da interface.

Na arquitetura de streaming de kernel, as categorias de topologia (consulte KSPROPERTY_TOPOLOGY_CATEGORIES) representam classes de interface do dispositivo.

A tabela a seguir lista as categorias de topologia que os adaptadores de áudio provavelmente usarão para descrever os recursos de seus subdispositivos.

Categoria Descrição
KSCATEGORY_ACOUSTIC_ECHO_CANCEL Um dispositivo de áudio que pode executar o cancelamento de eco acústico (consulte Efeitos de captura do DirectSound) registra-se nessa categoria.
KSCATEGORY_AUDIO Todos os dispositivos de áudio se registram nessa categoria.
KSCATEGORY_CAPTURE Um dispositivo de áudio que pode capturar um fluxo de dados se registra nessa categoria.
KSCATEGORY_DATATRANSFORM Um dispositivo de áudio que executa uma transformação de dados em um fluxo se registra nessa categoria.
KSCATEGORY_MIXER Um dispositivo de áudio que pode misturar fluxos de dados se registra nessa categoria.
KSCATEGORY_RENDER Um dispositivo de áudio que pode renderizar um fluxo de dados se registra nessa categoria.
KSCATEGORY_SYNTHESIZER Um dispositivo de áudio que pode converter mensagens MIDI em amostras de áudio de onda ou um sinal de saída analógico se registra nessa categoria (consulte Sintetizadores e Coletores de Onda).
KSCATEGORY_TOPOLOGY O driver de miniporta de topologia de um dispositivo se registra nessa categoria.
KSCATEGORY_DRM_DESCRAMBLE Um dispositivo de áudio que pode desembolsar um fluxo de ondas protegido por DRM se registra nessa categoria (confira Gerenciamento de Direitos Digitais).

Para obter uma lista completa de categorias de topologia, consulte os GUIDs KSCATEGORY_XXX definidos nos arquivos de cabeçalho Ks.h e Ksmedia.h.

Todos os dispositivos de áudio são classificados em KSCATEGORY_AUDIO, mas um dispositivo de áudio também pode ser classificado em categorias adicionais, como KSCATEGORY_RENDER (para um dispositivo de renderização de áudio) ou KSCATEGORY_SYNTHESIZER (para um sintetizador). Para cada categoria especificada pelo arquivo INF para um dispositivo, o Windows Installer cria um conjunto de entradas do Registro para esse dispositivo sob o nome da categoria (consulte Fábricas de Filtros).

Somente um dispositivo que contém um sintetizador interno deve se registrar na categoria KSCATEGORY_SYNTHESIZER. Observe que essa categoria exclui um dispositivo MPU-401 puro. Um dispositivo MPU-401 puro, que pode gerar ou inserir MIDI bruto de ou para um UART, deve se registrar nessas categorias:

  • KSCATEGORY_AUDIO

  • KSCATEGORY_RENDER

  • KSCATEGORY_CAPTURE

Observe que o driver do sistema SysAudio reserva a categoria de registro KSCATEGORY_AUDIO_DEVICE exclusivamente para seus dispositivos de áudio virtual. Os drivers de adaptador não devem se registrar nessa categoria.

O exemplo a seguir instala quatro interfaces de dispositivo comuns definidas pelo sistema que um adaptador normalmente dá suporte para um dispositivo de áudio.

Exemplo: Instalando interfaces de dispositivo de áudio

Neste exemplo, a seção device-install para o dispositivo de áudio XYZ usa a diretiva InF AddInterface para instalar quatro interfaces de adaptador de áudio. No seguinte, cada uma das quatro diretivas atribui uma cadeia de caracteres de referência exclusiva a uma interface, que o driver do adaptador pode usar para distinguir entre instâncias de cada classe de interface.

  [XYZ-Audio-Device.Interfaces]
  AddInterface=%KSCATEGORY_AUDIO%,%KSName_Wave%,XYZ-Audio-Device.Wave
  AddInterface=%KSCATEGORY_RENDER%,%KSName_Wave%,XYZ-Audio-Device.Wave
  AddInterface=%KSCATEGORY_CAPTURE%,%KSName_Wave%,XYZ-Audio-Device.Wave
  AddInterface=%KSCATEGORY_TOPOLOGY%,%KSName_Topology%,XYZ-Audio-Device.Topology

As três primeiras diretivas AddInterface especificam uma seção add-interface chamada XYZ-Audio-Device.Wave. A última especifica uma seção add-interface chamada XYZ-Audio-Device.Topology. Cada seção de interface de adição adiciona as seguintes entradas do Registro a uma subchave de interface do dispositivo, que pode ser acessada no modo de usuário na chave do Registro \DeviceClasses\<InterfaceGUID> :

  • Uma entrada do Registro FriendlyName especifica um nome amigável para cada interface do dispositivo.

  • O Microsoft DirectShow requer uma entrada de registro CLSID, definida como um valor guid de proxy, que indica que o adaptador pode ser acessado e controlado pelo driver do sistema KSProxy.

As duas seções de interface de adição aparecem no exemplo a seguir, que contém entradas de arquivo INF que adicionam FriendlyName e CLSID de cada interface ao registro:

  [XYZ-Audio-Device.Wave]
  AddReg=XYZ-Audio-Device.Wave.AddReg
  [XYZ-Audio-Device.Wave.AddReg]
  HKR,,FriendlyName,,%WaveDeviceName%
  HKR,,CLSID,,%Proxy.CLSID%

  [XYZ-Audio-Device.Topology]
  AddReg=XYZ-Audio-Device.Topology.AddReg
  [XYZ-Audio-Device.Topology.AddReg]
  HKR,,FriendlyName,,%WaveDeviceMixerName%
  HKR,,CLSID,,%Proxy.CLSID%

O palavra-chave HKR neste exemplo denota o caminho do Registro fornecido pelo sistema para o dispositivo. Para obter mais informações, consulte Diretiva InF AddReg.

Veja a seguir a seção Cadeias de caracteres deste exemplo.

  [Strings]
  KSCATEGORY_AUDIO="{6994AD04-93EF-11D0-A3CC-00A0C9223196}"
  KSCATEGORY_RENDER="{65E8773E-8F56-11D0-A3B9-00A0C9223196}"
  KSCATEGORY_CAPTURE="{65E8773D-8F56-11D0-A3B9-00A0C9223196}"
  KSCATEGORY_TOPOLOGY="{DDA54A40-1E4C-11D1-A050-405705C10000}"
  Proxy.CLSID="{17CCA71B-ECD7-11D0-B908-00A0C9223196}"
  WaveDeviceName="XYZ Audio Device"
  WaveDeviceMixerName="XYZ Audio Device Super Mixer"

O nome da cadeia de caracteres que uma diretiva AddInterface especifica para uma interface de dispositivo KSCATEGORY_XXX não pode ser localizado porque o driver do adaptador usa o mesmo nome internamente que uma constante de cadeia de caracteres. Os drivers de adaptador de exemplo no WDK (Kit de Driver do Windows) usam os seguintes nomes de cadeia de caracteres para suas interfaces de dispositivo de áudio:

  KSNAME_Wave="Wave"
  KSNAME_UART="UART"
  KSNAME_FMSynth="FMSynth"
  KSNAME_Topology="Topology"
  KSNAME_Wavetable="Wavetable"
  KSNAME_DMusic="DMusic"

Para fins de uniformidade, seu driver proprietário deve atribuir esses mesmos nomes às suas interfaces de dispositivo correspondentes. Se o driver der suporte a interfaces de dispositivo adicionais proprietárias, você poderá inventar seus próprios nomes proprietários para essas interfaces. Verifique se os nomes usados pelo driver correspondem aos do arquivo INF. Se as cadeias de caracteres não corresponderem, a configuração do sistema não carregará o driver.