Question

The digital sound is playing using DirectSound device. It is necessary to display sound activity in decibels - like analog devices do.

What is the right way to calculate sound pressure from the WAVE PCM data (44100 Hz, 16-bit)?

Was it helpful?

Solution

if you just need an "idea" of the sound pressure, you can simply compute the log-energy on some time franmes of the signal: split the signal every N samples, compute 10*log(sum(xn**2)) where x are the N samples, and you get a value in the dB domain. If you need to precisely display a measure (that is your 0 dB matches say a mixtable 0dB), it is a bit more complicated.

See here for more details:

http://music.columbia.edu/pipermail/music-dsp/2002-April/048341.html

OTHER TIPS

Sound pressure is a measure of force per unit area. To determine this you would have to have information about the speaker(s) on which the audio is played. You can obtain a decibel level with respect to an arbitrary reference (as opposed to the threshold of hearing) with the algorithm proposed by cournape.

Calculate the average signal power over a time interval, compute the base-10 logarithm and multiply by 19. The average power is calculated by averaging the the square of each sample over the interval. Note that positive and negative values are necessary (i.e. it must be an AC signal). So, make sure the PCM values are either floating-point, 2's complement or offset unsigned values accordingly.

Also, by applying Parseval's theorum and the Fourier transform you can also generate signal levels for different frequency bands.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top