Partilhar via


User-Mode componentes de áudio

No Windows Vista, as APIs de áudio principais servem como a base do subsistema de áudio de 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 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 DirectSound e as funções multimídia do Windows, 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 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 a seguir mostra as APIs de áudio principais e sua relação com os outros componentes de áudio de modo de usuário no Windows Vista.

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.

Como mostrado no diagrama anterior, as APIs de áudio principais fornecem uma base para as seguintes APIs de nível superior:

  • Fundação para os Media
  • Multimédia do Windows funções waveXxx e mixerXxx
  • DirectSound
  • DirectMusic

O DirectSound, as funções de áudio multimédia do Windows e o Media Foundation (através do seu componente de renderizador de streaming de áudio, ou SAR) comunicam diretamente com as principais APIs de áudio. O DirectMusic se comunica com as APIs de áudio principais indiretamente por meio do DirectSound.

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 compartilhado, o cliente grava dados de áudio no buffer de ponto de extremidade e o mecanismo de áudio do 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 Windows 7, um novo recurso chamado modo de baixa latência foi adicionado para fluxos no modo de compartilhamento. Neste modo, o motor de áudio funciona em modo pull, no qual há uma redução significativa na latência. Isso é muito útil para aplicativos de comunicação que exigem baixa latência de fluxo de áudio para streaming mais rápido.

Os aplicativos que gerenciam fluxos de áudio de baixa latência podem usar o MMCSS (Multimedia Class Scheduler Service) no Windows Vista para aumentar a prioridade dos threads de aplicativos 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 prioridade mais baixa. O MMCSS atribui uma prioridade a um thread com base em seu nome de tarefa. Por exemplo, o Windows Vista suporta os nomes de tarefas "Audio" e "Pro Audio" 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 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 dar suporte a um fluxo de modo compartilhado, o serviço de áudio do Windows (a caixa rotulada "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 final reside na memória acessível ao aplicativo e ao hardware de áudio.

O serviço de áudio do 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 do 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 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 é desativado por padrão e deve ser explicitamente ativado 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 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