Ho sviluppato, partendo da un esempio di Erel questo registratore.
Premesso che ho chiesto il permesso RECORD_AUDIO e il CheckAndRequest mi restituisce True (quindi tutto ok), quando eseguo il debug non effettua alcuna registrazione. Mi scrive il file ma se provo ad ascoltarlo si sente un fruscio per pochi secondi e nient'altro.
Cosa sbaglio?
B4X:
Sub Class_Globals
Private Root As B4XView 'ignore
Private xui As XUI 'ignore
Private aFile(255) As String
Private sFilePlay As String
Private sDir As String = File.DirInternal
Private mp As MediaPlayer
Private mB4XDialog As B4XDialog
Private streamer As AudioStreamer
Private buffers As List
Private timer1 As Timer
Private recordingStart As Long
Private output As OutputStream
Private recording As Boolean
Private mBitRate As Int = 16
Private mSampleRate As Int = 22050
Private mMono As Boolean = True
Private sFileRec As String
Private lDur As Long
Private clvRec As CustomListView
Private lblFile As B4XView
Private lbl1 As B4XView
Private lblRiga As B4XView
Private lblTitolo As B4XView
Private txtRiga As B4XView
Private bttPlay As B4XView
Private bttPause As B4XView
Private bttStop As B4XView
Private bttNuovo As B4XView
End Sub
Public Sub Initialize As Object
Return Me
End Sub
Private Sub B4XPage_Created (Root1 As B4XView)
Root = Root1
Root.LoadLayout("RegistratoreLO")
mB4XDialog.Initialize(Root)
streamer.Initialize("streamer", mSampleRate, mMono, mBitRate, streamer.VOLUME_VOICE_CALL)
buffers.Initialize
timer1.Initialize("timer1", 1000)
End Sub
private Sub B4XPage_Appear
CaricaCLV
End Sub
Private Sub CaricaCLV
Dim lFile As List = File.ListFiles(sDir)
Dim iNum As Int = lFile.Size
Dim iOK As Int = 0
For index=0 To iNum-1
Dim sAppo As String = lFile.Get(index)
If sAppo.SubString(sAppo.Length - 4) = ".wav" Then
aFile(index)=lFile.Get(index)
iOK = iOK+1
End If
Next
clvRec.Clear
For i = 0 To iOK-1
Dim p As B4XView = xui.CreatePanel("")
p.SetLayoutAnimated(0,0,0,500dip,30dip)
p.LoadLayout("ItemCLVRec")
lblFile.Text=aFile(i)
clvRec.Add(p,"")
Next
End Sub
Private Sub clvRec_ItemClick (Index As Int, Value As Object)
lbl1.As(Label).Text=aFile(Index)
sFilePlay=aFile(Index)
mp.Initialize
mp.Load(sDir, sFilePlay)
End Sub
Private Sub bttPlay_Click
mp.Play
End Sub
Private Sub bttPause_Click
mp.Pause
End Sub
Private Sub bttStop_Click
mp.Stop
mp.Load(sDir, sFilePlay)
End Sub
Private Sub bttRec_Click
Dim ime1 As IME
Dim pnlDialog As B4XView = xui.CreatePanel("")
pnlDialog.SetLayoutAnimated(0, 0, 0, 300dip, 100dip)
pnlDialog.LoadLayout("InputboxLO")
Dim Resum As ResumableSub = mB4XDialog.ShowCustom(pnlDialog, "Si", "No", "")
mB4XDialog.Base.Color = xui.Color_white
mB4XDialog.Base.SetColorAndBorder(xui.Color_white, 1dip, xui.Color_gray, 0)
Dim btnYes As B4XView = mB4XDialog.GetButton(xui.DialogResponse_Positive)
btnYes.Height = btnYes.Height * .8
btnYes.Left = btnYes.Left * .99
btnYes.Color = xui.Color_lightgray
btnYes.TextColor = xui.Color_black
Dim btnNo As B4XView = mB4XDialog.GetButton(xui.DialogResponse_Negative)
btnNo.Height = btnNo.Height * .8
btnNo.Left = btnNo.Left * .99
btnNo.Color = xui.Color_lightGray
btnNo.TextColor = xui.Color_black
lblTitolo.As(Label).Color=xui.Color_ARGB(255,0,0,139)
lblTitolo.As(Label).TextColor=xui.Color_white
lblTitolo.As(Label).Text=" Nuova Registrazione"
lblRiga.As(Label).Textcolor=xui.Color_ARGB(255,0,0,139)
lblRiga.As(Label).Text="Nome della registrazione:"
txtRiga.As(EditText).Color=xui.Color_White
txtRiga.As(EditText).Textcolor=xui.Color_ARGB(255,0,0,139)
txtRiga.As(EditText).Text=""
txtRiga.As(EditText).RequestFocus
ime1.Initialize("ime1")
ime1.ShowKeyboard(txtRiga.As(EditText))
Wait For (Resum) Complete (Result As Int)
If Result = xui.DialogResponse_Positive Then
sFileRec=txtRiga.As(EditText).Text & ".wav"
lbl1.As(Label).Text=sFileRec
End If
buffers.Clear
output = StartWaveFile(sDir, sFileRec, mSampleRate, mMono, mBitRate)
recording = True
streamer.StartRecording
recordingStart = DateTime.Now
timer1.Enabled = True
Timer1_Tick
bttPlay.As(Button).Enabled = False
bttNuovo.As(Button).Enabled = False
bttPause.As(Button).Enabled = False
bttStop.As(Button).Enabled = False
End Sub
Sub StartWaveFile(Dir As String, FileName As String, SampleRate As Int, Mono As Boolean, BitsPerSample As Int) As OutputStream
File.Delete(Dir, FileName)
Dim raf As RandomAccessFile
raf.Initialize2(Dir, FileName, False, True)
raf.WriteBytes("RIFF".GetBytes("ASCII"), 0, 4, raf.CurrentPosition)
raf.CurrentPosition = 8 'skip 4 bytes for the size
raf.WriteBytes("WAVE".GetBytes("ASCII"),0, 4, raf.CurrentPosition)
raf.WriteBytes("fmt ".GetBytes("ASCII"),0, 4, raf.CurrentPosition)
raf.WriteInt(16, raf.CurrentPosition)
raf.WriteShort(1, raf.CurrentPosition)
Dim numberOfChannels As Int
If Mono Then numberOfChannels = 1 Else numberOfChannels = 2
raf.WriteShort(numberOfChannels, raf.CurrentPosition)
raf.WriteInt(SampleRate, raf.CurrentPosition)
raf.WriteInt(SampleRate * numberOfChannels * BitsPerSample / 8, raf.CurrentPosition)
raf.WriteShort(numberOfChannels * BitsPerSample / 8, raf.CurrentPosition)
raf.WriteShort(BitsPerSample, raf.CurrentPosition)
raf.WriteBytes("data".GetBytes("ASCII"),0, 4, raf.CurrentPosition)
raf.WriteInt(0, raf.CurrentPosition)
raf.Close
Return File.OpenOutput(Dir, FileName, True)
End Sub
Sub Timer1_Tick
lDur=Round((DateTime.Now - recordingStart) / DateTime.TicksPerSecond)
End Sub
Private Sub bttStopRec_Click
streamer.StopRecording
recording = False
output.Close
CloseWaveFile(sDir, sFileRec)
timer1.Enabled = False
lbl1.As(Label).Text=sFileRec
CaricaCLV
bttPlay.As(Button).Enabled = True
bttNuovo.As(Button).Enabled = True
bttPause.As(Button).Enabled = True
bttStop.As(Button).Enabled = True
End Sub
Sub CloseWaveFile(Dir As String, FileName As String)
Dim raf As RandomAccessFile
raf.Initialize2(Dir, FileName, False, True)
raf.WriteInt(raf.Size - 8, 4)
raf.WriteInt(raf.Size - 44, 40)
raf.Close
sFilePlay=sFileRec
mp.Initialize
mp.Load(sDir,sFilePlay)
sFileRec=""
End Sub
Premesso che ho chiesto il permesso RECORD_AUDIO e il CheckAndRequest mi restituisce True (quindi tutto ok), quando eseguo il debug non effettua alcuna registrazione. Mi scrive il file ma se provo ad ascoltarlo si sente un fruscio per pochi secondi e nient'altro.
Cosa sbaglio?