简体   繁体   中英

Delphi XE5 firemonkey api call

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM