Partilhar via


Amostra de filtro de sintetizador

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEnginee Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda vivamente que o novo código utilize MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no 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

O filtro Synth é um filtro de origem que gera formas de onda de áudio.

Este filtro ilustra a construção de gráficos dinâmicos. Pode alternar entre áudio PCM não comprimido e formato MS_ADPCM comprimido (Microsoft Adaptive Delta Pulse Code Modulation).

Este filtro aparece no GraphEdit como "Filtro de sintetizador de áudio".

Para obter mais informações sobre a criação de gráficos dinâmicos, consulte Dynamic Graph Building.

Utilização

O filtro Synth permite que o usuário defina a forma de onda, frequência, número de canais e outras propriedades através da página de propriedades. Para definir o ponto final superior ou inferior da faixa de frequência varrida, mantenha pressionada a tecla SHIFT enquanto ajusta o controle deslizante de frequência. O filtro também suporta uma interface personalizada, ISynth2, para definir essas propriedades.

Para demonstrar o recurso de construção de gráficos dinâmicos, faça o seguinte:

  1. Crie o filtro e registre-o com o utilitário Regsvr32.
  2. Inicie o GraphEdit.
  3. Insira o filtro Sintetizador de Áudio. Ele aparece na categoria Filtros DirectShow.
  4. Renderize o pino de saída do filtro.
  5. Clique no botão Reproduzir.
  6. Abra a página de propriedades do filtro.
  7. Na área Formato de saída, selecione PCM ou Microsoft ADPCM.

Notas de programação

Este exemplo contém os seguintes ficheiros:

  • Dynsrc.h, Dynsrc.cpp: Contém duas classes base para filtros de origem que suportam a criação de gráficos dinâmicos, CDynamicSource e CDynamicSourceStream.
  • ISynth.h: Declara a interface ISynth2 personalizada para definir propriedades no filtro.
  • Resource.h: Contém constantes de recursos.
  • Synth.def: Exporta as funções DLL necessárias para a biblioteca COM.
  • Synth.h, Synth.cpp: Contém a classe CAudioSynth, que gera os dados de áudio, e a classe CSynthFilter, que implementa o filtro.
  • Synth.rc: Contém recursos usados pelo filtro.
  • Synthprp.h, Synthprp.cpp: Implementa a página de propriedades do filtro.

A classe CDynamicSource é adaptada da classe base CSource. Ele usa um ou mais pinos de saída derivados da classe CDynamicSourceStream. A classe CDynamicSourceStream é adaptada da classe CSourceStream, mas deriva da classe CDynamicOutputPin em vez da classe CBaseOutputPin.

A classe CDynamicSource tem os seguintes métodos não encontrados no CSource:

  • Parar: sinaliza o evento stop (CDynamicOutputPin::m_hStopEvent) e desliga o thread de trabalho para todos os pinos não conectados. Em um pino conectado, o método 'Inactive' do pino desativará o thread de trabalho.
  • Pausar: redefine o evento stop.
  • JoinFilterGraph: chama o métodoCDynamicOutputPin::SetConfigInfo em cada pino.

A classe CDynamicSourceStream tem os seguintes métodos não encontrados em CSourceStream:

  • DestroySourceThread: desliga o thread de trabalho.
  • FatalError: Sinaliza um erro para o gerenciador de gráficos de filtro.
  • OutputPinNeedsToBeReconnected: Sinaliza que o pino de saída deve ser reconectado. Quando este método é chamado, a thread de trabalho chama o método CDynamicOutputPin::DynamicReconnect para reconectar o pino.

Download do 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: [SDK Root]\Samples\Multimedia\DirectShow\Filters\Synth.

Exemplos do DirectShow