RenderExclusiveEventDriven
Este aplicativo de exemplo usa as APIs de áudio principal para renderizar dados de áudio para 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 exclusivo. Para um fluxo de modo exclusivo, o cliente compartilha o buffer de ponto de extremidade com o dispositivo de áudio.
Este tópico inclui as seções a seguir.
Descrição
Este exemplo demonstra os seguintes recursos.
- API MMDevice para enumeração e seleção de dispositivos multimídia.
- WASAPI para operações de gerenciamento de fluxo.
Requisitos
Product | Versão |
---|---|
SDK do Windows | Windows 7 |
Visual Studio | 2008 |
Baixar o exemplo
Este exemplo está disponível nos seguintes locais.
Localidade | Caminho/URL |
---|---|
SDK do Windows | \Arquivos de Programas\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\Audio\RenderExclusiveEventDriven\... |
Compilando o exemplo
Para criar o exemplo RenderExclusiveEventDriven, use as seguintes etapas:
- Abra o shell CMD para o SDK do Windows e altere para o diretório de exemplo RenderExclusiveEventDriven.
- Execute o comando
start WASAPIRenderExclusiveEventDriven.sln
no diretório RenderExclusiveEventDriven para abrir o projeto WASAPIRenderExclusiveEventDriven na janela do Visual Studio. - Na janela, selecione a configuração da solução Depurar ou Liberar, selecione o menu Construir na barra de menus e selecione a opção Compilar. Se você não abrir o Visual Studio 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, WASAPIRenderExclusiveEventDriven.vcproj.
Executando o exemplo
Se você compilar o aplicativo de demonstração com êxito, um arquivo executável, WASAPIRenderExclusiveEventDriven.exe, será gerado. Para executá-lo, digite WASAPIRenderExclusiveEventDriven
uma janela de comando seguida de 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.
WASAPIRenderExclusiveEventDriven.exe -d 20 -multimedia
A tabela a seguir mostra os argumentos.
Argument | Descrição |
---|---|
-? | Mostra ajuda. |
-h | Mostra ajuda. |
-f | Frequência da onda senoidal em Hz. |
-l | Latência de renderização de áudio em milissegundos. |
-d | Duração da onda senoidal em segundos. |
-m | Desativa o uso do MMCSS. |
-consolar | 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. |
-Extremidade | 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 renderiza uma onda senoidal em 440 Hz por 10 segundos. Esses valores podem ser modificados especificando os valores de opção -f e -d.
O exemplo RenderExclusiveEventDriven demonstra 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 de AUDCLNT_STREAMFLAGS_EVENTCALLBACK na chamada para IAudioClient::Initialize.
- Associe o cliente aos exemplos que estão prontos para serem renderizados fornecendo um identificador de evento para o sistema chamando o método IAudioClient::SetEventHandle.
- Crie um thread de renderização para processar amostras do mecanismo de áudio.
- Alinhe os buffers corretamente em um limite de 128 bytes antes de enviá-los ao dispositivo. Isso é feito ajustando a periodicidade do motor.
- Verifique o formato de combinação do ponto de extremidade do dispositivo para determinar se as amostras podem ser renderizadas. Se o dispositivo não suportar o formato de mistura, os dados são convertidos em PCM.
- Manipular 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 acionado por temporizador. Esse modo é demonstrado no exemplo RenderExclusiveTimerDriven .
Para obter mais informações sobre como renderizar um fluxo, consulte Renderizando um fluxo.
Tópicos relacionados