Página 1 de 1

Controle de Volume...

MensagemEnviado: 09 Set 2018 13:57
por Guri
Olá Amigos,

Olha eu de novo... :shock:

Estou envolvido em uma aplicação muito complexa (pra mim que sou aprendiz :P ).

Dividi em várias partes o software e estou finalizando etapas por conclusão de êxito em cada uma.

Estou usando um STM32F M0 e o compilador Mikroc arm.

O problema é o seguinte:

Eu estou reproduzindo um arquivo .PCM, com uma resolução de 16bits, jogo isso num DAC de 16bits, tudo OK...belezinha. Agora preciso controlar o volume desse PCM, e não estou conseguindo fazer isso de forma alguma.

Tenho utilizado a seguinte formula, mas o que acontece é uma forte distorção:

A variável "volume" é de 8bits.
var_16bit é uma int que contém o dado PCM.
O dac de saida é de 16bits.

var_16bit = ((var_16bit * volume) >> 8) & 0xff; // Fórmula Volume:
// a = ((a * b) >> c) & 0xff
// a = constante.
// b = variável de volume.
// c = deslocamento a direita ( /256 ).

Re: Controle de Volume...

MensagemEnviado: 09 Set 2018 15:48
por Red Neck Guy
A variável de 16 bits multiplicada pelo ganho de 8 irá extrapolar os 16 bis.
Tens que fazer a operação em 32 bits ou usar outra tecnica

Re: Controle de Volume...

MensagemEnviado: 09 Set 2018 21:46
por Guri
Realmente aquino, você esta correto.

Estava estourando o a variável.

Bom agora fiz assim:

unsigned long var_a;
unsigned char volume;
unsigned sampled;

var_a = sampled;

sampled = ((var_a * volume) >>8);

Funcionou perfeitamente, porém agora surgiu outro problema,
Quando o som vai diminuindo o volume, aparece uma "distorção" ou chiado, entre os números 25 até 0...alguém sabe como resolver isso? :shock: