Partilhar via


Para usar o controle de intervalo dinâmico

[O recurso associado a esta página, Windows Media Format 11 SDK, é um recurso herdado. Ele foi substituído por Leitor de Origem e Gravador de Coletor. O Leitor de Origem e o Gravador do Coletor foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use o Leitor de Origem e o Gravador do Coletor em vez do SDK do Windows Media Format 11, 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.]

O intervalo dinâmico de um conteúdo de áudio é basicamente a diferença entre o volume mais baixo e o volume máximo. Se o intervalo dinâmico do conteúdo for muito alto, os usuários poderão se encontrar ajustando o volume repetidamente durante a reprodução. Por exemplo, os filmes frequentemente têm um intervalo dinâmico alto. Muitas vezes, quando o volume é ajustado para que a caixa de diálogo possa ser compreendida durante cenas silenciosas, outras partes do filme com música ou efeitos sonoros são mais altas do que o desejado.

Os codecs Windows Media Audio 9 Professional e Windows Media Audio 9 Sem Perdas dão suporte a um recurso chamado controle de intervalo dinâmico. No momento da codificação, o codec calcula os valores de amplitude de pico e média no conteúdo e o objeto gravador armazena esses valores nos metadados do fluxo quando a codificação é concluída. Opcionalmente, um aplicativo também pode gravar valores de "destino" como metadados que os aplicativos player e o decodificador podem usar como dicas ao reproduzir o arquivo. No momento da reprodução, um aplicativo pode especificar o nível de controle de intervalo dinâmico a ser aplicado ao fluxo de áudio.

Reprodutor Multimídia do Windows implementa o controle de intervalo dinâmico como o recurso Modo Silencioso.

Quando usar o controle de intervalo dinâmico

O controle de intervalo dinâmico pode alterar o som do conteúdo. Por esse motivo, você não deve configurar seu aplicativo para usar o controle de intervalo dinâmico automaticamente. Em vez disso, forneça aos usuários a capacidade de ativar ou desativar o controle de intervalo dinâmico conforme necessário.

Usando o controle de intervalo dinâmico

No momento da reprodução, o controle de intervalo dinâmico é ativado usando a configuração de saída g_wszDynamicRangeControl. Use IWMReaderAdvanced2::SetOutputSetting para definir a configuração. Um valor zero (o padrão) indica que o intervalo dinâmico não deve ser alterado. Um valor de 1 ou 2 sinaliza o codec para executar o controle de intervalo dinâmico, em que 1 é um nível moderado de compactação de intervalo dinâmico e 2 é um alto nível de compactação de intervalo dinâmico.

No tempo de codificação ou no tempo de reprodução, você pode fornecer os valores pcm de destino do codec para os níveis de pico e média definindo os atributos WM/WMADRCPeakTarget e WM/WMADRCAverageTarget , respectivamente. Esses valores são armazenados como atributos de metadados e devem ser acessados usando os métodos da interface IWMHeaderInfo3 . Quando você codifica um fluxo de áudio usando o codec profissional ou sem perdas, os atributos WM/WMADRCPeakReference e WM/WMADRCAverageReference são definidos automaticamente para os níveis máximo e médio do conteúdo original. Os valores de destino são definidos com os mesmos valores que as referências por padrão.

O decodificador em tempo de reprodução calcula o intervalo dinâmico com base no nível selecionado do controle de intervalo dinâmico e nos valores de destino (se algum for especificado). Os intervalos possíveis são mostrados na tabela a seguir.

Configurações Intervalo de áudio entregue
g_wszDynamicRangeControl = 0 (quaisquer valores de destino) Mesmo intervalo que o conteúdo original.
g_wszDynamicRangeControl = 1 (Valores de destino iguais aos valores de referência) O nível médio é mantido e os picos são confinados à média +12 dB.
g_wszDynamicRangeControl = 2 (valores de destino iguais aos valores de referência) O nível médio é mantido e os picos são confinados à média +6 dB.
g_wszDynamicRangeControl = 1 (Valores de destino especificados) Nível médio definido como o valor médio de destino e picos confinados ao valor de pico de destino.
g_wszDynamicRangeControl = 2 (Valores de destino especificados) Nível médio definido como o valor médio de destino e os picos confinados à mediana dos valores de pico de destino e média de destino.

 

Observe que o controle de intervalo dinâmico é um recurso de decodificação somente e existe apenas como metadados no próprio arquivo. Essas configurações não têm efeito sobre o conteúdo armazenado no arquivo, a menos que você instrua especificamente o decodificador a usá-las. O SDK do Windows Media Format não fornece métodos para modificar o intervalo dinâmico dos dados de áudio no momento da codificação.

Tópicos Avançados