簡體   English   中英

Delphi XE5 Firemonkey API調用

[英]Delphi XE5 firemonkey api call

我正在嘗試通過直接調用android api TJAudioRecord在firemonkey中錄制音頻,但是它不起作用,無論我嘗試了什么,audioRecord.getState返回STATE_UNINITIALIZED,請幫忙嗎?

該功能有誤

  audioRecord := 

    TJAudioRecord.JavaClass.init(TJMediaRecorder_AudioSource.JavaClass.VOICE_COMMUNICATION,
                                                 16000,
                                                 TJAudioFormat.JavaClass.CHANNEL_IN_MONO,
                                                  TJAudioFormat.JavaClass.ENCODING_PCM_16BIT,
                                                  bufferSize);

完整的代碼

 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;

我使用以下代碼,該代碼可在我的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');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM