Compartilhar via


Componentes de Áudio em Modo de Usuário

As APIs de áudio principais servem como a base do subsistema de áudio no modo de usuário. As APIs de áudio principais são implementadas como uma camada fina de componentes do sistema de modo de usuário que separam clientes do modo de usuário de drivers de áudio no modo kernel e hardware de áudio. APIs de áudio de nível superior, como o Media Foundation, acessam dispositivos de áudio por meio das APIs de áudio principais. Além disso, alguns aplicativos de áudio se comunicam diretamente com as APIs de áudio principais.

As APIs de áudio principais dão suporte à noção amigável de um dispositivo de ponto de extremidade de áudio. Um dispositivo de ponto de extremidade de áudio é uma abstração de software que representa um dispositivo físico que o usuário manipula diretamente. Exemplos de dispositivos de ponto de extremidade de áudio são alto-falantes, fones de ouvido e microfones. Para obter mais informações, consulte Dispositivos de Ponto de Extremidade de Áudio.

O diagrama a seguir mostra as APIs de áudio principais e sua relação com os outros componentes de áudio do modo de usuário.

diagrama de componentes de renderização de áudio no modo de usuário

Para simplificar, o diagrama anterior mostra apenas um caminho de dados de renderização de áudio para o dispositivo de ponto de extremidade— o diagrama não mostra um caminho de dados de captura de áudio. As APIs de áudio principais incluem a API MMDevice, a WASAPI, a API DeviceTopology e a API EndpointVolume, que são implementadas nos módulos Audioses.dll e Mmdevapi.dll sistema de modo de usuário.

As APIs de áudio principais fornecem uma base para APIs de nível superior, como o Media Foundation, que se comunica com as APIs de áudio principais por meio de seu componente de renderizador de áudio de streaming (SAR).

Um cliente de WASAPI passa dados para um dispositivo de ponto de extremidade por meio de um buffer de ponto de extremidade. Os componentes de software e hardware do sistema gerenciam a movimentação de dados do buffer de ponto de extremidade para o dispositivo de ponto de extremidade de uma maneira amplamente transparente para o cliente. Além disso, para um dispositivo de ponto de extremidade que se conecta a um adaptador de áudio com detecção de presença de entrada, o cliente pode criar um buffer de ponto de extremidade apenas para um dispositivo de ponto de extremidade que esteja fisicamente presente. Para obter mais informações sobre a detecção de presença de jack, consulte Dispositivos de Ponto de Extremidade de Áudio.

O diagrama anterior mostra dois tipos de buffer de ponto de extremidade. Se um cliente de WASAPI abrir um fluxo no modo compartilhado, o cliente gravará dados de áudio no buffer do ponto de extremidade e o mecanismo de áudio Windows lerá os dados do buffer. Nesse modo, o cliente compartilha o hardware de áudio com outros aplicativos em execução em outros processos. O mecanismo de áudio mistura os fluxos desses aplicativos e reproduz a combinação resultante por meio do hardware. O mecanismo de áudio é um componente do sistema de modo de usuário (Audiodg.dll) que executa todas as suas operações de processamento de fluxo no software. Por outro lado, se um cliente abrir um fluxo no modo exclusivo, o cliente terá acesso exclusivo ao hardware de áudio. Normalmente, apenas um pequeno número de aplicativos "pro audio" ou RTC exigem modo exclusivo. Embora o diagrama mostre os fluxos de modo compartilhado e de modo exclusivo, apenas um desses dois fluxos (e seu buffer de ponto de extremidade correspondente) existe, dependendo se o cliente abre o fluxo no modo compartilhado ou no modo exclusivo.

No modo exclusivo, o cliente pode optar por abrir o fluxo em qualquer formato de áudio compatível com o dispositivo de ponto de extremidade. No modo compartilhado, o cliente deve abrir o fluxo no formato mix que está atualmente em uso pelo mecanismo de áudio (ou um formato semelhante ao formato de combinação). Os fluxos de entrada do mecanismo de áudio e a combinação de saída do mecanismo estão todos nesse formato.

No modo de baixa latência, que está disponível para fluxos no modo compartilhado, o mecanismo de áudio é executado no modo pull, no qual há uma redução significativa na latência. Isso é útil para aplicativos de comunicação que exigem baixa latência de fluxo de áudio para streaming mais rápido.

Aplicativos que gerenciam fluxos de áudio de baixa latência podem usar o MMCSS (Serviço de Agendador de Classe Multimídia) para aumentar a prioridade dos threads de aplicativo que acessam buffers de ponto de extremidade. O MMCSS permite que aplicativos de áudio sejam executados em alta prioridade sem negar recursos de CPU a aplicativos de menor prioridade. O MMCSS atribui uma prioridade a um thread com base em seu nome de tarefa. Por exemplo, há suporte para os nomes de tarefas "Áudio" e "Áudio Pro" para threads que gerenciam fluxos de áudio. Por padrão, a prioridade de um thread "Pro Audio" é maior do que a de um thread "Audio". Para obter mais informações sobre o MMCSS, consulte a documentação do SDK do Windows.

As APIs de áudio principais dão suporte a formatos de fluxo PCM e não PCM. No entanto, o mecanismo de áudio pode misturar apenas fluxos de PCM. Portanto, somente fluxos de modo exclusivo podem ter formatos que não são pcm. Para obter mais informações, consulte Formatos de dispositivo.

O mecanismo de áudio é executado em seu próprio processo protegido, que é separado do processo em que o aplicativo é executado. Para dar suporte a um fluxo de modo compartilhado, o serviço de áudio Windows (a caixa rotulada como "Serviço de Áudio" no diagrama anterior) aloca um buffer de ponto de extremidade entre processos que é acessível ao aplicativo e ao mecanismo de áudio. Para o modo exclusivo, o buffer de ponto de extremidade reside na memória acessível ao aplicativo e ao hardware de áudio.

O serviço de áudio Windows é o módulo que implementa Windows política de áudio. A política de áudio é um conjunto de regras internas que o sistema aplica às interações entre fluxos de áudio de vários aplicativos que compartilham e competem pelo uso do mesmo hardware de áudio. O serviço de áudio Windows implementa a política de áudio definindo os parâmetros de controle para o mecanismo de áudio. As funções do serviço de áudio incluem:

  • Manter o controle dos dispositivos de áudio aos quais o usuário adiciona ou remove do sistema.
  • Monitorando as funções atribuídas aos dispositivos de áudio no sistema.
  • Gerenciando os fluxos de áudio de grupos de tarefas que produzem classes semelhantes de conteúdo de áudio (console, multimídia e comunicações).
  • Controlando o nível de volume do fluxo de saída combinado ("submix") para cada um dos vários tipos de conteúdo de áudio.
  • Informando o mecanismo de áudio sobre os elementos de processamento nos caminhos de dados para os fluxos de áudio.

Em algumas versões do Windows, o serviço de áudio Windows é desabilitado por padrão e deve ser ativado explicitamente antes que o sistema possa reproduzir áudio.

No exemplo mostrado no diagrama anterior, o dispositivo de ponto de extremidade é um conjunto de alto-falantes conectados ao adaptador de áudio. O aplicativo cliente grava dados de áudio no buffer do ponto de extremidade e o mecanismo de áudio manipula os detalhes do transporte dos dados do buffer para o dispositivo de ponto de extremidade.

A caixa rotulada como "Driver de Áudio" no diagrama anterior pode ser uma combinação de componentes de driver fornecidos pelo sistema e fornecidos pelo fornecedor. No caso de um adaptador de áudio em um barramento PCI ou PCI Express, o sistema fornece o driver do sistema de classe de porta (Portcls.sys), que implementa um conjunto de drivers de porta para as várias funções de áudio no adaptador, e o fornecedor de hardware fornece um driver de adaptador que implementa um conjunto de drivers de miniporto para lidar com operações específicas do dispositivo para os drivers de porta. No caso de um controlador de áudio de alta definição e um codec em um barramento PCI ou PCI Express, o sistema fornece o driver do adaptador (Hdaudio.sys) e nenhum driver fornecido pelo fornecedor é necessário. No caso de um adaptador de áudio em um barramento USB, o sistema fornece o driver do sistema de classe AVStream (Ks.sys) mais o driver de áudio USB (Usbaudio.sys); novamente, nenhum driver fornecido pelo fornecedor é necessário.

Para simplificar, o diagrama anterior mostra apenas fluxos de renderização. No entanto, as APIs de áudio principais também dão suporte a fluxos de captura. No modo compartilhado, vários clientes podem compartilhar o fluxo capturado de um dispositivo de hardware de áudio. No modo exclusivo, um cliente tem acesso exclusivo ao fluxo capturado do dispositivo.

Guia de programação