I am trying to record audio in firemonkey by calling android api TJAudioRecord directly but it doesn't work, audioRecord.getState returns STATE_UNINITIALIZED whatever I tried, please help?
There is some error in this function
audioRecord :=
TJAudioRecord.JavaClass.init(TJMediaRecorder_AudioSource.JavaClass.VOICE_COMMUNICATION,
16000,
TJAudioFormat.JavaClass.CHANNEL_IN_MONO,
TJAudioFormat.JavaClass.ENCODING_PCM_16BIT,
bufferSize);
full code
bufferSize := TJAudioRecord.JavaClass.getMinBufferSize(16000,
TJAudioFormat.JavaClass.CHANNEL_IN_MONO,
TJAudioFormat.JavaClass.ENCODING_PCM_16BIT);
if (bufferSize <> TJAudioRecord.JavaClass.ERROR_BAD_VALUE) then
begin
audioRecord := TJAudioRecord.JavaClass.init(TJMediaRecorder_AudioSource.JavaClass.VOICE_COMMUNICATION,
16000,
TJAudioFormat.JavaClass.CHANNEL_IN_MONO,
TJAudioFormat.JavaClass.ENCODING_PCM_16BIT,
bufferSize);
ShowMessage(IntToStr(buffersize));
if (audioRecord.getState = TJAudioRecord.JavaClass.STATE_INITIALIZED)then begin
//then begin
audioRecord.startRecording;
ShowMessage('ok');
end;
end;
except
ShowMessage('Error 0');
end;
I use the following code and it works on my Samsung Galaxy Note III.
Ses := TJAudioRecord.JavaClass.init(TJMediaRecorder_AudioSource.JavaClass.MIC, 11025, TJAudioFormat.JavaClass.CHANNEL_IN_MONO, TJAudioFormat.JavaClass.ENCODING_PCM_16BIT, 44100 * 2);
(Ses As JAudioRecord).startRecording;
Okunan := 0;
M := TMemoryStream.Create;
for I := 1 to 2 do
Begin
Tampon := TJavaArray<SmallInt>.Create(44100);
Okunan := Okunan + (Ses As JAudioRecord).read(Tampon, 0, 44100);
M.Write(Tampon.Data^, Tampon.Length * 2);
Tampon.Free;
End;
(Ses As JAudioRecord).stop;
Ses.release;
M.SaveToFile(TPath.GetRingtonesPath+'/ses.raw');
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.