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:

  1. Crie um grafo de filtro no GraphEdit que renderiza um fluxo de vídeo.
  2. Exclua todos os fluxos de áudio renderizados.
  3. Adicione o filtro Metronome ao grafo. Ele aparece na categoria Filtros do DirectShow.
  4. Execute o grafo. O vídeo começará a ser reproduzido em velocidade normal.
  5. 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.

Classe CBaseReferenceClock

Exemplos do DirectShow