android - Delphi XE5 Firemonkey API调用

标签 android delphi audio firemonkey

我试图通过直接调用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');

关于android - Delphi XE5 Firemonkey API调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23087084/

相关文章:

java - 如何在Java中播放长声音文件?没有语法错误但没有声音

ios - 如何在 iOS 上使用 Xamarin 播放音调

java.io.IOException : unexpected end of stream on Connection? 异常

delphi - float 属性默认非零,有可能吗?

android - 与 RelativeLayout 一起使用时的 ListActivity 问题

delphi - 创建/恢复表单时,重叠的 TCustomControl 对象绘制顺序不正确

使用 Vista 大图标的 Delphi 2009 应用程序

ios - ios13音频流在后台被切断

Android Page Curl 动画

android - 在 Android 上的 Libgdx 中使用着色器时为 1 FPS