Sub Process_Globals
'These global variables will be declared once when the application starts.
'These variables can be accessed from all modules.
Private xui As XUI
Private MP As MediaPlayer
Private RP As RuntimePermissions
Private Visualizer As Vizualizer
Private JO As JavaObject
Private mDensity As Int = 10
Private Gap As Int = 4
End Sub
Sub Globals
'These global variables will be redeclared each time the activity is created.
Private Panel As B4XView
Private CV As Canvas
End Sub
Sub Activity_Create(FirstTime As Boolean)
JO.InitializeContext
Activity.LoadLayout("Layout")
If Not(RP.Check(RP.PERMISSION_RECORD_AUDIO)) Then
RP.CheckAndRequest(RP.PERMISSION_RECORD_AUDIO)
Wait For Activity_PermissionResult (Permission As String, Result As Boolean)
If Not(Result) Then ExitApplication
End If
MP.Initialize
MP.Load(File.DirAssets,"Happiness.mp3")
MP.Play
CV.Initialize(Panel)
Visualizer.Initialize(Me,MP.As(JavaObject).GetFieldJO("mp").RunMethod("getAudioSessionId",Null))
Visualizer.SetDataCaptureListener(Visualizer.GetMaxCaptureRate / 2,True,False)
Visualizer.Enabled = True
End Sub
Sub Wave_Capture(Bytes() As Byte,SamplingRate As Int)
If Bytes = Null Then Return
Dim BarWidth As Float = Panel.Width / mDensity
Dim Div As Float = Bytes.Length / mDensity ' 102.4
For i = 0 To mDensity -1
Dim BytePosition As Int = Ceil(i*Div)
Dim Top As Int = JO.RunMethod("getHeight",Array(Bytes(BytePosition),Panel.Height))
Dim BarX As Float = (i * BarWidth) + (BarWidth/2)
CV.DrawLine(BarX,Panel.Height,BarX,Top,Colors.Cyan,BarWidth - Gap)
Panel.As(Panel).Invalidate
Next
End Sub
#if java
public int getHeight(byte Byte,int Height){
int top = Height +
((byte) (Math.abs(Byte) + 128)) * Height / 128;
return top;
}
#End If