Sub Process_Globals
Private Recorder As AudioRecord
Private Buffer() As Byte
Private BufferSize As Int
Private SampleRate As Int = 44100
Private AudioSource As Int = 1 ' Microphone
Private ChannelConfig As Int = 16 ' MONO
Private AudioEncoding As Int = 2 ' PCM 16-bit
Private Timer1 As Timer
End Sub
Sub Globals
Private lblVolume As Label
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("Main")
BufferSize = AudioRecord.GetMinBufferSize(SampleRate, ChannelConfig, AudioEncoding)
Recorder.Initialize(AudioSource, SampleRate, ChannelConfig, AudioEncoding, BufferSize)
Buffer = Array As Byte(BufferSize)
Timer1.Initialize("Timer1", 200) ' Check volume every 200 ms
Timer1.Enabled = True
Recorder.StartRecording
End Sub
Sub Activity_Resume
Recorder.StartRecording
End Sub
Sub Activity_Pause (UserClosed As Boolean)
Recorder.Stop
End Sub
Sub Timer1_Tick
Dim ReadBytes As Int = Recorder.Read(Buffer, 0, BufferSize)
If ReadBytes > 0 Then
Dim Sum As Long = 0
For i = 0 To ReadBytes - 1 Step 2
Dim Sample As Short = Bit.Or(Bit.And(0xff, Buffer(i)), Bit.ShiftLeft(Bit.And(0xff, Buffer(i + 1)), 8))
Sum = Sum + Abs(Sample)
Next
Dim Amplitude As Float = Sum / ReadBytes
Dim Decibels As Float = 20 * Log10(Amplitude)
lblVolume.Text = "Volume: " & NumberFormat2(Decibels, 1, 2, 2, False) & " dB"
End If
End Sub