Página 1 de 1
Controle de volume

Enviado:
15 Out 2010 22:28
por jonowsky
Pessoal, sei que nossa audição funciona de forma logaritmica, minha pergunta é, qual a lógica que devo utilizar por exemplo para criar 10 níveis de volume para um sinal de áudio de 8 bits (0 a 255)?

Enviado:
15 Out 2010 23:00
por MarcusPonce
Acho que a maneira mais simples e mais fácil é que cada para cada nível de volume que você diminui você deve dividir a intensidade do áudio por 2.
Dividir por 2 as amostas de áudio é baixar 6dB.
Portanto no volume máximo, vamos chamar de "10", você não faz nada com as amostas.
No volume "9" você divide por 2.
No volume "8" você divide por 4.
No volume "7" você divide por 8.
Etc.
Supondo que você vai controlar o volume no firmware e mandar o resultado da conta para um D/A então fica bem fácil.
O problema é que seu D/A deveria ter pelo menos 16 bits para o audio ficar com a mesma qualidade tanto alto quanto baixo volume.
Uma forma simples de sentir quanto é tirar 6dB do volume é você ficar em frente a um som estéreo tocando música e zera uma caixa de som.

Enviado:
15 Out 2010 23:06
por rcakto
dependendo do circuito, caso o controle do volume for externo ao MCU, voce poderia colocar um potenciometro logaritimico em serie com a saida do DAC para o amplificador ou em paralelo com o amplificar.. mas sao circuitos a ser bem projetados...
esse potenciometro e meio dificil de se achar mas ele trabalha com a escala de dBs quando voce o gira...

Enviado:
15 Out 2010 23:07
por MarcusPonce
Faltou explicar um detalhe: Se você usar as amostas de 8 bits e o conversor D/A de 16 bits então sempre tem que multiplicar por 256 antes de dividir. Claro que é mais fácil fazer um passo apenas...
E tem que levar em conta o fato que as amostas de audio normalmente são sinalizadas.

Enviado:
15 Out 2010 23:14
por jonowsky
a idéia é fazer todo o controle digital. O áudio está gravado em 8 bits e o D/A trabalha com 14 bits, então todo sinal que leio desloco 6 casas para a direita <<6 e então jogo no A/D...

Enviado:
15 Out 2010 23:27
por rcakto
olha se voce ainda esta projetando, eu sei que tem ICs que tem o controle de volume todo digital utilizando portas i/o de mcu mas se nao me falha a memoria voce iria precisar montar um circuito equalizador que a saida nao tem qualidade pq e basicamente um recistor variando... não um circuito de controle de dBs de verdade...

Enviado:
15 Out 2010 23:30
por MarcusPonce
ok, então nos níveis mais baixos o áudio final vai ficar ruidoso, mas talvez dê para encarar...
Só lembrando que se as amostras são sinalizadas complemento 2, então o bit +sig da amostra (que é o sinal) deve ser copiado em todos os bits mais significativos (na esquerda) do resultado que vai para o D/A quando você fizer as contas.

Enviado:
15 Out 2010 23:40
por jonowsky
O sistema já funciona bem, com uma qualidade muito boa, só agora estou implementando o volume. Fiz como o amigo MarcusPonce sugeriu, de dividir por 2^n, funcionou muito bem, só nos últimos níveis como ele mesmo disse, ficou ruidoso, mas eliminarei estes últimos níveis... Obrigado Amigos!!!
testei aqui e ficou bala!
Problema resolvido


Enviado:
15 Out 2010 23:41
por MarcusPonce
A sugestão do rcakto também funcionaria se calcular quais as combinações adequadas para os 10 níveis. Ir de 2 em 2 (6dB em 6dB) é uma possibilidade. Pode ser de 1,5 em 1,5 também, etc.

Enviado:
15 Out 2010 23:43
por MarcusPonce
Já testou e funcionou, que bacana!
Abraço