Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Gabarito

VU Meter - Medidor de áudio - Componente gráfico

Recommended Posts

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.