# Android Question[Solved] How to calculate DECIBEL from Audio-Samples

#### Midimaster

##### Active Member
Licensed User
[SOLVED] Look at my next post to see four function for calculating decibels!

hi, I'm working with audio and build a function to find out the Dezibel's of an audio signal:

B4X:
``````factor=level/SamplingRate
Decibel = Logarithm(factor*factor,10)*10``````

this works as expected and return the decibels of an audio signal as in AUDACITY

But now I need the reverse case. I have a given Decibel value and need to find out the resulting Level

How Can I do this?

This is a working example to demonstrate the function:
B4X:
``````Sub LogaTest
Dim Level As Int=30
Dim Dezibel, factor As Double
Dim Percent As Int
Dim SamplingRate=32768
For i=0 To 12
Level=Level*2
factor= Level/SamplingRate
Dezibel =Logarithm(factor*factor,10)*10
Percent=factor*100
Log("Level= " & Level & "    (=" & Percent & "%)       =" & \$" \$1.1{Dezibel}"\$ & "dB  ")
Next
End Sub``````

Last edited:

#### Erel

##### B4X founder
Staff member
Licensed User
(I cannot help you with the actual question, but the Sleep(100) at the end of the sub will not do anything useful)

#### udg

##### Expert
Licensed User
I don't know if this can help. Anyway, AFAIK, the inverse function of a logarithm is a raise to power.
So that
x = log base number --> base^x = number
In your case it seems that base = 10 and number = factor * factor (then you multiply by 10).
This should produce something like:
B4X:
``10^ (decibel/10) = factor ^2``

#### Midimaster

##### Active Member
Licensed User
thanks UDG. Your answer brought the correct result. I did not know that it is that easy. Thanks a lot for the quick answer.

These are the four functions to calculate with Decibels from audio-signals:

B4X:
``````LevelToDecibel(volume As Float) As Float
'  purpose: returns dBA equivalent  for given normalized volume

SampleValueToDecibel(Value As Int, BitDepth As Int) As Float
'  purpose: returns dBA equuivalant  for given SampleValue based volume

DecibelToLevel(Decibel As Float) As Float
'  purpose: returns a normalized volume for given dBA value

DecibelToSampleValue(Decibel As Float, BitDepth As Int)
'  purpose: returns a SampleValue based volume for given dBA value``````

Here is the code for the four functions:
B4X:
``````Sub LevelToDecibel(volume As Float) As Float
'  purpose: returns dBA equivalent  for given normalized volume
'    input: normalized volume between  0(=silent) and 1(=max volume)
'           ( inputs >1 will result in positive dBA values )
'   output: -99dBA to 0dbA
Dim Decibel As Float=Logarithm(volume*volume,10)*10
Return Decibel
End Sub

Sub SampleValueToDecibel(Value As Int, BitDepth As Int) As Float
'  purpose: returns dBA equuivalant  for given SampleValue based volume
'    input: Value between 0=silent and BitDepth/2
'   output: -99dBA to 0dbA
Dim SamplingRate As Int=Power(2,BitDepth-1)
Dim Level As Float=Value/SamplingRate
Return LevelToDecibel(Level)
End Sub

Sub DecibelToLevel(Decibel As Float) As Float
'  purpose: returns a normalized volume for given dBA value
'    input: -99dBA to 0dbA
'           (input>0 will result in volume>1)
'   output: normalized volume between  0(=silent) and 1(=max volume)
Dim level As Double=Power(10,(Decibel/10))
Return Sqrt(level)
End Sub

Sub DecibelToSampleValue(Decibel As Float, BitDepth As Int) As Float
'  purpose: returns a SampleValue based volume for given dBA value
'    input: -99dBA to 0dbA
'   output: SampleValue based volume between  between 0=silent and BitDepth/2
Dim level As Double=Power(10,(Decibel/10))
level=Sqrt(level)
Dim Value As Float=level*Power(2,BitDepth-1)
Return Value
End Sub``````

Here is a example how to use them:
B4X:
``````Sub DecibelTest
Log(".")
Log("First Test: Samples To dBA")
Log("-----------------------------------------")
Dim SampleValue As Int=-30
For i=0 To 10
SampleValue=SampleValue*2
Log("SampleValue=" & SampleValue & " equals " & \$" \$1.1{SampleValueToDecibel(SampleValue,16)}"\$  & "dBA")
Next
Log(".")

Log("Second Test: dBA To Volume")
Log("-----------------------------------------")

Dim Decibel As Int=-60
For i= 0 To 12
Decibel=Decibel +5

Log(Decibel & "dBA equals "  & \$" \$1.2{(DecibelToLevel(Decibel)*100)}"\$ &"% volume")
Next
End Sub``````

Last edited:

### Similar Threads

Android Tutorial Audio Ringbuffer
Replies
5
Views
749
Replies
3
Views
577
Java Question Save buffer in mp3
Replies
0
Views
810
Replies
1
Views
3K
Java Question Java code error
Replies
0
Views
1K