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:
- Compile o filtro e registre-o com o utilitário Regsvr32.
- Inicie o GraphEdit.
- Insira o filtro Sintetizador de Áudio. Ele aparece na categoria Filtros do DirectShow.
- Renderize o pino de saída do filtro.
- Clique no botão Reproduzir .
- Abra a página de propriedades do filtro.
- 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.
Tópicos relacionados