How to get the reading of deciBels from iOS AVAudioRecorder in a correct scale?

后端 未结 1 1818
轻奢々
轻奢々 2021-02-02 01:31

I\'m trying to obtain a noise level in my iOS app, using AVAudioRecorder.

The code I\'m using is:

    [self.recorder updateMeters];
    float decibels =         


        
1条回答
  •  醉话见心
    2021-02-02 02:30

    Forget my previous answer. I figured out a better solution (correct me if I am wrong). I think what both of us want to achieve is the decibel SPL but the averagePowerChannel method gives us the mic's output voltage. The decibel SPL is a logarithmic unit that indicates ratio. We need to convert that output in decibel SPL which is not so easy because for that you need reference values. In other words you need a DB SPL values and the according voltage values to them. You can also try to estimate them by comparing your results with an app like decibel Ultra. To come straight to the point: The formula you need is as follows:

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

    you can set the referenceLevel to 5. That gives me good results on my iPhone. The averagePowerForChannel is the value you gain from the method averagePowerForChannel: method and range indicates the upper limit of the range. I set that to 160. Finally offset is an offset you can add to get into the area you want. I added 50 here.

    Still, if anybody got a better solution to this. It would be great!

    0 讨论(0)
提交回复
热议问题