Componentes de áudio no modo de usuário
No Windows Vista, as principais APIs de áudio servem como 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 de modo kernel e do hardware de áudio. 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 principais APIs de áudio suportam a 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 de modo de usuário no Windows Vista.
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 a API MMDevice, WASAPI, a API DeviceTopology e a API EndpointVolume, que são implementadas nos módulos de sistema Audioses.dll e Mmdevapi.dll modo de usuário.
Conforme mostrado no diagrama anterior, as APIs de áudio principais fornecem uma base para as seguintes APIs de nível superior:
- Media Foundation
- Funções waveXxx e mixerXxx multimídia do Windows
- DirectSound
- DirectMusic
O DirectSound, as funções de áudio multimídia do Windows e o Media Foundation (por meio de seu renderizador de áudio de fluxo contínuo ou componente SAR) se comunicam diretamente com as APIs de áudio principais. O DirectMusic se comunica com as principais APIs de áudio indiretamente por meio do DirectSound.
Um cliente do 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 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 tomada, 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 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 de ponto de extremidade e o mecanismo de áudio do 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 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 no modo exclusivo, ele tem 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 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 de extremidade. No modo compartilhado, o cliente deve abrir o fluxo no formato de mixagem que está atualmente em uso pelo mecanismo de áudio (ou um formato semelhante ao formato de mixagem). Os fluxos de entrada do mecanismo de áudio e a mistura de saída do mecanismo 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. Nesse modo, o mecanismo de áudio é executado no 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 (Serviço Agendador de Classe Multimídia) no Windows Vista para aumentar a prioridade de 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 oferece suporte aos 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 oferecem suporte aos formatos de fluxo PCM e não-PCM. No entanto, o mecanismo de áudio pode misturar apenas fluxos PCM. Assim, apenas fluxos 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 oferecer 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 de extremidade 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 diretiva 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 diretiva de áudio definindo os parâmetros de controle para o mecanismo de áudio. As atribuições do serviço de áudio incluem:
- Manter o controle dos dispositivos de áudio que 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.
- 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á 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 de ponto de extremidade e o mecanismo de áudio lida com os detalhes de 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 pelo fornecedor. No caso de um adaptador de áudio em um barramento PCI ou PCI Express, o sistema fornece o driver de 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 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 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 oferecem 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.
Tópicos relacionados