Partilhar via


User-Mode componentes de áudio

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

As APIs de áudio principais suportam a noção amigável de um dispositivo de ponto final de áudio. Um dispositivo de ponto final de áudio é uma abstração de software que representa um dispositivo físico que o usuário manipula diretamente. Exemplos de dispositivos terminais de áudio são altifalantes, auscultadores e microfones. Para obter mais informações, consulte Audio Endpoint Devices.

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

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 principais APIs de áudio incluem o MMDevice API, WASAPI, o DeviceTopology APIe o EndpointVolume API, que são implementados nos módulos de sistema de modo de usuário Audioses.dll e Mmdevapi.dll.

As APIs de áudio centrais fornecem uma base para APIs de nível superior, como a Media Foundation, que comunica com as APIs de áudio principais através do seu componente renderizador de áudio em 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 deteção de presença de jack, o cliente pode criar um buffer de ponto de extremidade somente para um dispositivo de ponto de extremidade que esteja fisicamente presente. Para obter mais informações sobre deteção de presença de jack, consulte Audio Endpoint Devices.

O diagrama anterior mostra dois tipos de buffer de ponto final. Se um cliente do WASAPI abrir um fluxo em modo partilhado, então o cliente escreve dados de áudio no buffer do endpoint e o motor de áudio Windows lê os dados do buffer. Neste modo, o cliente partilha o hardware de áudio com outras aplicações em execução noutros processos. O mecanismo de áudio mistura os fluxos desses aplicativos e reproduz a mistura resultante através 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 em software. Por outro lado, se um cliente abre um fluxo em modo exclusivo, o cliente tem acesso exclusivo ao hardware de áudio. Normalmente, apenas um pequeno número de aplicações "pro audio" ou RTC requerem o 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 suportado pelo dispositivo de ponto final. No modo compartilhado, o cliente deve abrir o fluxo no formato de mistura que está atualmente em uso pelo mecanismo de áudio (ou um formato semelhante ao formato de mixagem). Os fluxos de entrada do motor de áudio e a mistura de saída do motor estão todos neste formato.

No modo de baixa latência, disponível para streams em modo partilhado, o motor de áudio corre em modo pull, no qual há uma redução significativa da latência. Isto é útil para aplicações de comunicação que requerem baixa latência de fluxo de áudio para um streaming mais rápido.

Aplicações que gerem fluxos de áudio de baixa latência podem usar o Serviço de Agendar de Classes Multimédia (MMCSS) para aumentar a prioridade dos threads de aplicação que acedem aos buffers de endpoint. O MMCSS permite que aplicativos de áudio sejam executados em alta prioridade sem negar recursos de CPU a aplicativos de prioridade mais baixa. O MMCSS atribui uma prioridade a um thread com base em seu nome de tarefa. Por exemplo, os nomes de tarefas "Áudio" e "Pro Áudio" são suportados para threads que gerem fluxos de áudio. Por padrão, a prioridade de um thread "Pro Audio" é maior do que a de um thread "Audio". Para mais informações sobre MMCSS, consulte a documentação do SDK do Windows.

As APIs de áudio principais suportam formatos de fluxo PCM e não-PCM. No entanto, o mecanismo de áudio pode misturar apenas fluxos PCM. Assim, apenas streams de modo exclusivo podem ter formatos nã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 suportar um fluxo em modo partilhado, o serviço de áudio Windows (a caixa rotulada "Serviço de Áudio" no diagrama anterior) aloca um buffer de endpoint entre processos que é acessível tanto à aplicação como ao motor de áudio. Para o modo exclusivo, o buffer de ponto final reside na memória acessível ao aplicativo e ao hardware de áudio.

O serviço de áudio Windows é o módulo que implementa a política de áudio do Windows. 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 controlo para o motor de áudio. As funções do serviço de áudio incluem:

  • Manter o controle dos dispositivos de áudio que o usuário adiciona ou remove do sistema.
  • Monitoramento das funções atribuídas aos dispositivos de áudio no sistema.
  • Gerenciar os fluxos de áudio de grupos de tarefas que produzem classes semelhantes de conteúdo de áudio (console, multimídia e comunicações).
  • Controlar o nível de volume do fluxo de saída combinado ("submix") para cada um dos vários tipos de conteúdo de áudio.
  • Informar 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 do Windows está desativado por defeito e tem de ser explicitamente ativado antes de o sistema poder 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 de ponto de extremidade e o mecanismo de áudio lida com os detalhes do transporte dos dados do buffer para o dispositivo de ponto de extremidade.

A caixa rotulada "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 de sistema Port Class (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 miniporta 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 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 de sistema da 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 principais APIs de áudio também suportam 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