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