VU Meter - Medidor de áudio - Componente gráfico
Olá.
Procurei um player que tivesse um medidor de áudio. Eu costumo usar o GomPlayer e o VLC player, mas nenhum deles possui uma forma de visualizar a evolução do áudio que está sendo executado.
Também as pesquisas de outro player com essa característica não me trouxeram nenhum resultado.
Eu consegui alguns componentes que podem ser usados para o que preciso. O que falta agora é fazer a conexão do componente com a saída de áudio do Windows, de forma a ter uma visualização da evolução do áudio quando executar qualquer arquivo do tipo MP3 ou mesmo um vídeo AVI ou MP4.
Eu ainda uso Delphi 7. Por esse motivo o código para controlar a ligação do componente com a Saída WaveOut deve ser compatível com Delphi 7.
Pesquisando, eu acabei encontrando essa informação:
>
Controlar volume de sons Wave
Inclua na seção uses: mmSystem
Acessam a API do Windows para controlar o volume de sons wave.
function Wave_SuportaControleVolume: boolean;
var
Caps: TWaveOutCaps;
begin
if WaveOutGetDevCaps(WAVE_MAPPER, @Caps,
SizeOf(Caps)) = MMSYSERR_NOERROR then
Result := Caps.dwSupport and WAVECAPS_VOLUME <> 0
else
Result := false;
end;
type
TVolume = record
Esquerdo: Word;
Direito: Word;
end;
function Wave_ObterVolume: TVolume;begin
waveOutGetVolume(integer(WAVE_MAPPER), @Result);
end;
procedure Wave_DefinirVolume(Volume: TVolume);begin
waveOutSetVolume(integer(WAVE_MAPPER), LongWord(Volume));
end;A primeira função verifica se o dispositivo Wave instalado suporta o controle de volume.
O retorno desta função é true em caso positivo.
As duas funções seguintes permitem obter e definir o volume, respectivamente.
O tipo TVolume permite controlar os canais esquerdo e direito individualmente.
Observações
Um bom lembrete! O valor $0000 (zero) indica ausência de som e $FFFF indica o volume máximo.
Autor: Daniel P. Guimarães
Home-page: www.tecnobyte.com.br
Fonte: http://www.tecnobyte.com.br/dica6.html?pagina=dica6.html#dica90
Eu fiz um teste com esse código acima.
O componente que estou usando possui a propriedade Position, do tipo Double. Eu fiz a seguinte atribuição, dentro de um evento Timer:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
VrAngularMeter1.Position := Wave_ObterVolume.Esquerdo;
end;
O ponteiro corre direto para o valor máximo, mesmo que não eu não esteja executando nenhum vídeo ou áudio.
Como deveria ser a correta atribuição?
O Valor atual do Wave_ObterVolume.Esquerdo é de 65535.
Está parecendo que é algum limite.
Lembrando que esse valor aparece mesmo sem nada estar sendo executado, ou seja, silêncio absoluto.
Deve haver algum ajuste ou conversão, para exibir o valor verdadeiro.
Qual ajuste?
Por isso, eu pergunto aos colegas como fazer a correta atribuição e obter os valores reais da saída de som do Windows.
Discussão (1)
Carregando comentários...