Compartilhar via


Exemplo de filtro de sintetizador

[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

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

Esse filtro ilustra a criação dinâmica de grafo. Ele pode alternar entre o áudio PCM descompactado e o formato de MS_ADPCM compactado (Modulação de Código de Pulso Delta Adaptável da Microsoft).

Esse filtro aparece em GraphEdit como "Filtro do Sintetizador de Áudio".

Para obter mais informações sobre a criação dinâmica de grafo, consulte Dynamic Graph Building.

Uso

O filtro Synth permite que o usuário defina a forma de onda, a frequência, o número de canais e outras propriedades por meio da página de propriedades. Para definir o ponto de extremidade superior ou inferior do intervalo de frequência varrido, mantenha pressionada a tecla SHIFT enquanto ajusta o controle deslizante de frequência. O filtro também dá suporte a uma interface personalizada, ISynth2, para definir essas propriedades.

Para demonstrar o recurso de criação de grafo dinâmico, faça o seguinte:

  1. Compile 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 do 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 arquivos:

  • Dynsrc.h, Dynsrc.cpp: contém duas classes base para filtros de origem que dão suporte à criação dinâmica de grafo, 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 em CSource:

  • Parar: sinaliza o evento de parada (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 desligará o thread de trabalho.
  • Pausar: redefine o evento de parada.
  • JoinFilterGraph: chama o método CDynamicOutputPin::SetConfigInfo em cada pin.

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 grafo de filtro.
  • OutputPinNeedsToBeReconnected: sinaliza que o pino de saída deve ser reconectado. Quando esse método é chamado, o thread de trabalho chama o método CDynamicOutputPin::D ynamicReconnect para reconectar o pino.

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\Synth.

Exemplos do DirectShow