sonometro sonido que para miden medir decibelimetro decibeles contaminacion celular app aplicaciones aplicacion acustica iphone audio avaudiorecorder decibel

iphone - sonido - ¿Cómo obtener la lectura de decibelios desde iOS AVAudioRecorder en una escala correcta?



decibelimetro app android (1)

Estoy tratando de obtener un nivel de ruido en mi aplicación iOS, usando AVAudioRecorder.

El código que estoy usando es:

[self.recorder updateMeters]; float decibels = [self.recorder averagePowerForChannel:0]; // 160+db here, to scale it from 0 to 160, not -160 to 0. decibels = 160+decibels; NSLog(@"Decibels: %.3f", decibels);

Las lecturas que recibo, cuando el teléfono se encuentra en mi escritorio son de aproximadamente 90-100dB.

Revisé este enlace y la tabla que vi allí muestra que:

Aspirador - 80dB
Gran Orquesta - 98dB
Walkman en el nivel máximo - 100dB
Concierto de Front Rows of Rock - 110dB

Ahora, sin embargo, mi oficina parece ser ruidosa, no está cerca del walkman al nivel máximo.

¿Hay algo que deba hacer aquí para obtener las lecturas correctas? Como parece, el micrófono de mi iPhone es muy sensible. Es un iPhone4S, si hace la diferencia.


Olvida mi respuesta anterior. Descubrí una mejor solución (corrígeme si estoy equivocado). Creo que lo que ambos queremos lograr es el SPL de decibeles, pero el método promedio de PowerChannel nos da el voltaje de salida del micrófono. El decibel SPL es una unidad logarítmica que indica la relación. Necesitamos convertir esa salida en decibelios SPL, que no es tan fácil porque para eso necesita valores de referencia. En otras palabras, necesita un valor DB SPL y los valores de voltaje correspondientes para ellos. También puede intentar estimarlos comparando sus resultados con una aplicación como decibel Ultra. Para ir directo al grano: la fórmula que necesita es la siguiente:

SPL = 20 * log10(referenceLevel * powf(10, (averagePowerForChannel/20)) * range) + offset;

puedes establecer el referenceLevel en 5. Eso me da buenos resultados en mi iPhone. El promedio de PowerForChannel es el valor que se obtiene del método averagePowerForChannel: método y rango indica el límite superior del rango. Lo configuré en 160. Finalmente, el desplazamiento es una compensación que puede agregar para ingresar al área que desea. Agregué 50 aquí.

Aún así, si alguien tiene una mejor solución para esto. ¡Que sería genial!