Gabarito 0 Denunciar post Postado Janeiro 1, 2015 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 WaveInclua na seção uses: mmSystemAcessam 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çõesUm bom lembrete! O valor $0000 (zero) indica ausência de som e $FFFF indica o volume máximo.Autor: Daniel P. GuimarãesHome-page: www.tecnobyte.com.brFonte: 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
Gabarito 0 Denunciar post Postado Janeiro 8, 2015 Quase uma semana depois e nenhuma resposta.Será que alguém que entende do assunto não chegou a ver a pergunta?Por isso, repito a questão. Compartilhar este post Link para o post Compartilhar em outros sites