Partilhar 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 subdispositivo). Para cada interface de dispositivo, o arquivo INF especifica um valor de entrada FriendlyName , que é acessível no modo de usuário, sob a chave do Registro da interface.

Na arquitetura kernel-streaming, as categorias de topologia (consulte KSPROPERTY_TOPOLOGY_CATEGORIES) representam classes de interface de 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
CANCELAMENTO_DE_ECO_ACÚSTICO_KSCATEGORIA Um dispositivo de áudio que pode executar cancelamento de eco acústico (consulte Efeitos de captura DirectSound) registra-se nesta categoria.
KSCATEGORY_AUDIO Todos os dispositivos de áudio se registram nesta categoria.
KSCATEGORY_CAPTURE Um dispositivo de áudio que pode capturar um fluxo de dados registra-se nesta 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 regista-se nesta 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 wave ou um sinal de saída analógico registra-se nesta categoria (consulte Sintetizadores e Wave Sinks).
CATEGORIA_DE_TOPOLOGIA O driver de miniporta de topologia de um dispositivo se registra nessa categoria.
KSCATEGORY_DRM_DESCRAMBLE Um dispositivo de áudio que pode desembaralhar um fluxo de onda protegido por DRM registra-se nessa categoria (consulte Gerenciamento de Direitos Digitais).

Para obter uma lista completa das 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 que o arquivo INF especifica 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 filtro).

Apenas um dispositivo que contém um sintetizador embutido deve registrar-se sob a categoria KSCATEGORY_SYNTHESIZER. Observe que esta categoria exclui um dispositivo MPU-401 puro. Um dispositivo MPU-401 puro, que pode produzir ou inserir MIDI bruto de ou para um UART, deve registrar-se nestas 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 do adaptador não devem se registrar nesta categoria.

O exemplo a seguir instala quatro interfaces de dispositivo comuns definidas pelo sistema que um adaptador normalmente suporta 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. A seguir, 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. O último especifica uma seção add-interface chamada XYZ-Audio-Device.Topology. Cada seção add-interface adiciona as seguintes entradas do registo a uma subchave de interface de dispositivo, que pode ser acessada no modo de utilizador sob a chave de registo \DeviceClasses\<InterfaceGUID> :

  • Uma entrada de registro FriendlyName especifica um nome amigável para cada interface de dispositivo.

  • O Microsoft DirectShow requer uma entrada de registo CLSID, definida como um valor GUID de proxy, que indica que o adaptador pode ser acedido e controlado pelo controlador de sistema KSProxy.

As duas seções add-interface 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%

A palavra-chave HKR neste exemplo indica o caminho de registro fornecido pelo sistema para o dispositivo. Para obter mais informações, consulte Diretiva INF AddReg.

A seguir está a seção Strings para este 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 como uma constante de cadeia de caracteres. Os drivers de exemplo do adaptador no Kit de Drivers do Windows (WDK) usam os seguintes nomes de cadeia de caracteres para as suas interfaces de dispositivo de áudio:

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

Por uma questão de uniformidade, seu driver proprietário deve atribuir esses mesmos nomes às interfaces de dispositivo correspondentes. Se o seu driver suporta interfaces de dispositivo adicionais que são proprietárias, você pode inventar seus próprios nomes proprietários para essas interfaces. Certifique-se de que os nomes que o driver usa correspondem aos do seu arquivo INF. Se as cadeias de caracteres não corresponderem, a configuração do sistema não carregará o driver.