Как получить чтение децибел от iOS AVAudioRecorder в правильном масштабе?

Я пытаюсь получить уровень шума в моем приложении для iOS, используя AVAudioRecorder.

Код, который я использую:

    [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);

Показания, которые я получаю, когда телефон сидит на моем столе, составляют около 90-100 дБ.

Я проверил эту ссылку, и таблица, которую я там увидел, показывает, что:

Пылесос - 80дБ
Большой оркестр - 98дБ
Walkman на максимальном уровне - 100 дБ
Передние ряды рок-концерта - 110 дБ

Теперь, несмотря на то, что мой офис может показаться громким, он не возле сторожа на максимальном уровне.

Есть ли что-то, что я должен сделать здесь, чтобы получить правильные показания? Как кажется, микрофон моего iPhone очень чувствительный. Это iPhone4S, если это имеет значение.

1 ответ

Забудь мой предыдущий ответ. Я нашел лучшее решение (поправьте меня, если я ошибаюсь). Я думаю, что мы оба хотим достичь SPL децибела, но метод AveragePowerChannel дает нам выходное напряжение микрофона. Децибел SPL является логарифмической единицей, которая указывает отношение. Нам нужно преобразовать этот вывод в децибел SPL, что не так просто, потому что для этого вам нужны справочные значения. Другими словами, вам нужны значения DB SPL и соответствующие им значения напряжения. Вы также можете попытаться оценить их, сравнив свои результаты с таким приложением, как decibel Ultra. Чтобы перейти прямо к сути: вам нужна следующая формула:

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

Вы можете установить referenceLevel на 5. Это дает мне хорошие результаты на моем iPhone. AveragePowerForChannel - это значение, которое вы получаете от метода averagePowerForChannel: метод и диапазон указывают верхний предел диапазона. Я установил это на 160. Наконец, смещение - это смещение, которое вы можете добавить, чтобы попасть в нужную область. Я добавил 50 здесь.

Тем не менее, если у кого-нибудь есть лучшее решение для этого. Было бы здорово!

Другие вопросы по тегам