#Region  Project Attributes
    #ApplicationLabel: Knock
    #VersionCode: 1
    #VersionName:
    #BridgeLogger: True
    'SupportedOrientations possible values: unspecified, landscape or portrait.
    #SupportedOrientations: unspecified
    #CanInstallToExternalStorage: False
#End Region
#Region  Activity Attributes
    #FullScreen: False
    #IncludeTitle: True
#End Region
Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    Private timer1 As Timer
    Private streamer As AudioStreamer
End Sub
Sub Globals
    'These global variables will be redeclared each time the activity is created.
    Dim buffers As List
    Dim Lbl As Button
    Dim btnPlay As Button
    Dim btnStartRec As Button
    Dim btnStopRec As Button
    Private rp As RuntimePermissions
'    Private recordingStart As Long
End Sub
Sub Activity_Create(FirstTime As Boolean)
    buffers.Initialize
    timer1.Initialize("timer1", 1000)
    Screen
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Sub Screen
    Lbl.Initialize("None")
    Lbl.Color=Colors.LightGray
    Lbl.Gravity=Gravity.FILL
    Lbl.Text="Время"
    Activity.AddView(Lbl, 20%x, 31%y, 60%x, 10%y)
    
    btnStartRec.Initialize("StartRec")
    btnStartRec.Color=Colors.Gray
    btnStartRec.Gravity=Gravity.FILL
    btnStartRec.Text="START"
    Activity.AddView(btnStartRec, 10%x, 2%y, 30%x, 10%y)
    
    btnStopRec.Initialize("StopRec")
    btnStopRec.Color=Colors.Gray
    btnStopRec.Gravity=Gravity.FILL
    btnStopRec.Text="STOP"
    Activity.AddView(btnStopRec, 50%x, 2%y, 30%x, 10%y)
    
    btnPlay.Initialize("Play")
    btnPlay.Color=Colors.Gray
    btnPlay.Gravity=Gravity.FILL
    btnPlay.Text="PLAY"
    Activity.AddView(btnPlay, 10%x, 16%y, 30%x, 10%y)
End Sub
Private Sub StartRec_Click
    rp.CheckAndRequest(rp.PERMISSION_RECORD_AUDIO)
    Wait For Activity_PermissionResult (Permission As String, Result As Boolean)
    If Result = False Then
        MsgboxAsync("No permission", "")
        Return
    End If
    If streamer.PlayerBufferSize = 0 Then
        streamer.Initialize("streamer", 44100, True, 16, streamer.VOLUME_MUSIC)
'        streamer.Initialize("streamer", 92000, True, 16, streamer.VOLUME_MUSIC)
    End If
    buffers.Clear
    streamer.StartRecording
    recordingStart = DateTime.Now
    timer1.Enabled = True
    Timer1_Tick
    btnPlay.Enabled = False
End Sub
Private Sub StopRec_Click
    streamer.StopRecording
    timer1.Enabled = False
    btnPlay.Enabled = True
    Lbl.Text = ""
End Sub
Private Sub Play_Click
    btnStartRec.Enabled = False
    streamer.StartPlaying
    For Each b() As Byte In buffers
        streamer.Write(b)
    Next
    streamer.Write(Null) 'when this "message" will be processed, the player will stop.
End Sub
Private Sub streamer_PlaybackComplete
    Log("PlaybackComplete")
    btnStartRec.Enabled = True
End Sub
Private Sub streamer_RecordBuffer (Buffer() As Byte)
    buffers.Add(Buffer)
End Sub
Sub streamer_Error
    Log(LastException)
End Sub
Private Sub Timer1_Tick
    Dim razmer As Long, v As Int, b As String, db As Float
    Log("tick")
'    Lbl.Text = "Recording: " & _
'    Round((DateTime.Now - recordingStart) / DateTime.TicksPerSecond) & " seconds"
    razmer=buffers.size
    If razmer>22 Then
        b=buffers.Get(razmer-1)
        v=Bit.ParseInt(b.SubString(4),16)
        db=Logarithm(v,10)
        Lbl.Text = "Size bufer " & razmer & "  Vol: " & db
    End If
'    Lbl.Text = sm.dBValue
End Sub