Exemplo de filtro metronome
[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]
Descrição
Este filtro de exemplo mostra como implementar um relógio de referência. O filtro usa a entrada de microfone padrão para escutar picos de áudio (como cliques, palmas das mãos ou tosses), que ele usa para determinar uma taxa de relógio.
Uso
Compile o projeto de exemplo e copie a DLL de filtro (Metronom.ax) para o diretório do sistema Windows. Execute o arquivo Metronom.reg para registrar a DLL.
Para usar o filtro:
- Crie um grafo de filtro no GraphEdit que renderiza um fluxo de vídeo.
- Exclua todos os fluxos de áudio renderizados.
- Adicione o filtro Metronome ao grafo. Ele aparece na categoria Filtros do DirectShow.
- Execute o grafo. O vídeo começará a ser reproduzido em velocidade normal.
- Bata as mãos ou use um metronome para definir uma nova velocidade.
Notas de programação
Esse filtro funciona apenas para vídeo. O renderizador de áudio não é capaz de sincronizar com taxas de relógio radicalmente diferentes.
Se você bater palmas 92 vezes por minuto (uma vez a cada ~652 ms), o vídeo será reproduzido no ritmo normal. Você pode alterar esse padrão alterando o valor da constante BPM
em Metronom.cpp.
Se você parar de bater palmas por um período de tempo e, em seguida, começar a bater palmas novamente, você deve começar novamente aproximadamente na mesma velocidade, ou o filtro irá ignorá-lo. Além disso, a taxa de reprodução de vídeo é limitada pela velocidade da CPU. Se você exceder o limite por qualquer período de tempo, o filtro deixará de responder às alterações de taxa. Se isso acontecer, interrompa o grafo e reinicie.
Se você implementar seu próprio relógio, as regras mais importantes são que os relógios de referência não devem retroceder. Ou seja, eles nunca devem relatar um valor temporal menor que o valor de hora anterior.
Baixar o exemplo
Para baixar os exemplos do SDK do DirectShow, instale a versão mais recente do SDK do Windows.
Este exemplo é instalado no seguinte caminho: [Raiz do SDK]\Samples\Multimedia\DirectShow\Filters\Metronome.
Tópicos relacionados