Controle de Volume...

Software e Hardware para linha ARM

Moderadores: 51, guest2003, Renie, gpenga

Controle de Volume...

Mensagempor Guri » 09 Set 2018 13:57

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 ).
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Re: Controle de Volume...

Mensagempor Red Neck Guy » 09 Set 2018 15:48

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
ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

Re: Controle de Volume...

Mensagempor Guri » 09 Set 2018 21:46

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:
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais


Voltar para ARM

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x