iPhone SDK: AvaudiorEcorder Medering - Como mudar o PeakpowerForChannel do Decibel em porcentagem?

StackOverflow https://stackoverflow.com/questions/2465328

Pergunta

O AvaudiorCorder no iPhone SDK pode ser usado para obter o pico e a energia média para um canal, em decibéis. O intervalo está entre 0dB e 160dB. Qual é o cálculo usado para convertê -lo em uma escala entre 0 - 10 ou algo semelhante que pode ser usado para um medidor de nível de áudio?

Foi útil?

Solução

O intervalo é de -160 dB a 0 dB. Você provavelmente deseja exibi -lo em um medidor que vai de -90 dB a 0 dB. Exibir como decibéis é realmente mais útil do que um nível de áudio linear, porque os decibéis são uma escala logarítmica, o que significa que ele se aproxima mais de perto o quão alto percebemos um som.

Dito isto, você pode usar isso para converter de decibéis em linear:

linear = pow (10, decibels / 20);

e o inverso:

decibels = log10 (linear) * 20;

O intervalo para os decibéis acima é o infinito negativo a zero e para linear é de 0,0 a 1,0. Quando o valor linear é 0,0, isto é -inf db; Linear em 1,0 é 0 dB.

Outras dicas

A Apple também implementou uma classe de conversão de amplitude linear de banco de dados metetável.cpp e metetable.h Procure no exemplo do SpeakEre App.

Você pode usar a função embutida deles que calcula o valor "on-the-fly"

inline double DbToAmp(double inDb);

OU

Crie uma instância metertável para usar a tabela de pesquisa pré-calculada. Isso armazena valores de conversão na memória para que seu aplicativo possa reduzir o número de cálculos.

float ValueAt(float inDecibels);

NOTA: Provavelmente, a tabela de pesquisa é necessária se você tiver muitos outros cálculos em andamento ao mesmo tempo ou precisar de processamento muito rápido.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top