Pergunta

Qual é a diferença entre os métodos peakPowerForChannel e averagePowerForChannel de AVAudioRecorder?

E por que o valor devolvido é negativo? Não é suposto ser 0 para nenhum som e ir para cima quando a amplitude do som sobe? Como posso converter para um formato mais "legível"?

Graças.

Foi útil?

Solução

Enquanto eu não olhei para esses valores, uma vez que está relacionado com o volume de áudio, eu acho que ele é medido como uma mudança em decibéis.

0 seria o volume máximo e mais silencioso nada do que poderia ser expressa como uma gota em decibéis.

positivo e negativo, não importa. Basta lembrar que é uma escala logarítmica, onde você está medindo a diferença de volume (ou intensidade percebida).

Outras dicas

meios potência de pico, tendo o valor máximo de todos os valores absolutos de todas as amostras. É útil para evitar recorte do áudio.

A potência média é o RMS (root mean square) das amostras. Isso é útil para determinar o quão alto o som de áudio para os ouvidos humanos.

O valor é negativo porque é expresso em decibéis, onde 0 dB é igual ao valor máximo do sistema de áudio. É uma escala log10, e a fórmula para conversão é:

db = 10 * log10 (level);

em que db é decibéis e nível é o valor escalar variando de 0,0 a 1,0. Então, quando o nível é de 0,0 (em silêncio), o resultado é infinito negativo.

Se você quiser um formato "legível", você pode usar um medidor de nível (UIProgressView ou a sua própria), onde o máximo é 0.0 eo min é -60,0 (você pode ajustar dependendo do nível de ruído). Uma vez que você está acostumado a decibéis, eles fazem mais sentido do que os níveis lineares.

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