Partilhar via


RenderSharedEventDriven

Este aplicativo de exemplo usa as APIs de áudio principal para renderizar dados de áudio em um dispositivo de saída, especificado pelo usuário. Este exemplo demonstra o buffer controlado por eventos para um cliente de renderização no modo compartilhado. Para um fluxo de modo compartilhado, o cliente compartilha o buffer de ponto de extremidade com o mecanismo de áudio.

Este tópico contém as seguintes seções.

Descrição

Este exemplo demonstra os seguintes recursos.

  • da API MMDevice para enumeração e seleção de dispositivos multimídia.
  • WASAPI para operações de gestão de fluxos.

Requerimentos

Produto Versão
SDK do Windows Janelas 7
Estúdio Visual 2008

 

Download do exemplo

Este exemplo está disponível nos seguintes locais.

Localização Caminho/URL
Windows SDK \Arquivos de Programas\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\Audio\RenderSharedEventDriven\...

 

Construindo a amostra

Para criar o exemplo RenderSharedEventDriven, use as seguintes etapas:

  1. Abra o shell CMD para o SDK do Windows e mude para o diretório de exemplo RenderSharedEventDriven.
  2. Execute o comando start WASAPIRenderSharedEventDriven.sln no diretório RenderSharedEventDriven para abrir o projeto WASAPIRenderSharedEventDriven na janela do Visual Studio.
  3. Na janela, selecione a configuração Debug ou Release solution, selecione o menu Build na barra de menus e selecione a opção Build. Se você não abrir o Visual Studio a partir do shell CMD para o SDK, o Visual Studio não terá acesso ao ambiente de compilação do SDK. Nesse caso, o exemplo não será compilado a menos que você defina explicitamente a variável de ambiente MSSdk, que é usada no arquivo de projeto, WASAPIRenderSharedEventDriven.vcproj.

Executando o exemplo

Se você compilar o aplicativo de demonstração com êxito, um arquivo executável, WASAPIRenderSharedEventDriven.exe, será gerado. Para executá-lo, digite WASAPIRenderSharedEventDriven em uma janela de comando seguida por argumentos obrigatórios ou opcionais. O exemplo a seguir mostra como executar o exemplo especificando a duração da reprodução no dispositivo multimídia padrão.

WASAPIRenderSharedEventDriven.exe -d 20 -multimedia

A tabela a seguir mostra os argumentos.

Argumento Descrição
-? Mostra ajuda.
-h Mostra ajuda.
-f Frequência das ondas senoidais em Hz.
-l Latência de renderização de áudio em milissegundos.
-d Duração da onda senoidal em segundos.
-m Desabilita o uso do MMCSS.
-consola Use o dispositivo de console padrão.
-Comunicações Use o dispositivo de comunicação padrão.
-multimédia Use o dispositivo multimídia padrão.
-parâmetro de avaliação final Use o identificador de ponto de extremidade especificado no valor do switch.

 

Se o aplicativo for executado sem argumentos, ele enumerará os dispositivos disponíveis e solicitará que o usuário selecione um dispositivo para a sessão de renderização. Depois que o usuário especifica um dispositivo, o aplicativo processa uma onda senoidal a 440 Hz por 10 segundos. Esses valores podem ser modificados especificando -f e -d valores de switch.

RenderSharedEventDriven demonstra o buffer controlado por eventos. O exemplo mostra como:

  • Instancie um cliente de áudio, configure-o para ser executado no modo exclusivo e habilite o buffer controlado por eventos definindo o sinalizador AUDCLNT_STREAMFLAGS_EVENTCALLBACK na chamada como IAudioClient::Initialize.
  • Associe o cliente aos exemplos que estão prontos para serem renderizados fornecendo um identificador de evento para o sistema chamando o IAudioClient::SetEventHandle método.
  • Crie um thread de renderização para processar amostras do mecanismo de áudio.
  • Verifique o formato de mistura do ponto de extremidade do dispositivo para determinar se as amostras podem ser renderizadas. Se o dispositivo não suportar o formato mix, os dados são convertidos em PCM.
  • Manipule a comutação de fluxo.

Depois que a sessão de renderização começa e o fluxo é iniciado, o mecanismo de áudio sinaliza o identificador de evento fornecido para notificar o cliente sempre que um buffer fica pronto para o cliente processar. Os dados de áudio também podem ser processados em um loop controlado por temporizador. Esse modo é demonstrado no RenderSharedTimerDriven exemplo.

Para obter mais informações sobre como renderizar um fluxo, consulte Renderizando um fluxo.

exemplos de SDK que usam as APIs de áudio principais