Как получить измерение громкости записи iPhone в дБ, с пределом не менее 120 дБ - PullRequest
5 голосов
/ 30 марта 2010

Я пытаюсь сделать простой измеритель громкости для iPhone. Я хочу, чтобы громкость отображалась в дБ. При использовании этого турориала я получаю измерения только до 78 дБ. Я читал, что это потому, что спектр dBFS для 16-битных аудиозаписей составляет всего 96 дБ.

Я попытался изменить этот кусок кода в функции init:

dataFormat.mSampleRate = 44100.0f;
dataFormat.mFormatID = kAudioFormatLinearPCM;
dataFormat.mFramesPerPacket = 1;
dataFormat.mChannelsPerFrame = 1;
dataFormat.mBytesPerFrame = 2;
dataFormat.mBytesPerPacket = 2;
dataFormat.mBitsPerChannel = 16;
dataFormat.mReserved = 0;

Я изменил значение mBitsPerChannel, надеясь увеличить битовое значение записи.

dataFormat.mBitsPerChannel = 32;

Если для этой переменной задано значение 32, функция "mAveragePower" возвращает только 0.

Итак, как я могу измерить больше децибел? Весь мой код практически такой же, как в уроке, который я выложил выше.

Заранее спасибо, Томас

1 Ответ

5 голосов
/ 31 марта 2010

16-битный звук имеет только динамический диапазон , равный 96 dB, но я подозреваю, что вы можете запутаться между dB, который является относительным измерением, и dB SPL, что является абсолютным измерением уровня звукового давления . Чтобы измерить уровень звукового давления в дБ, вам необходимо откалибровать микрофон и аудиооборудование, используя какое-то эталонное значение. Как только вы откалибруете свой вход, вполне возможно, что ваш 96 dB динамического диапазона преобразуется в абсолютный диапазон, скажем, от 44 dB SPL до 140 dB SPL.

См. Также мой ответ на предыдущий аналогичный вопрос по SO: Как рассчитать уровень звука в дБ?

Примечание: определение дБ УЗД - это уровень звукового давления относительно 20 мкПа (среднеквадратичное значение).

...