delphi4arab منتديات دلفي للعرب
Android Record Audio to TIdBytes and play it - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : متتديات باسكال Pascal (https://delphi4arab.net/forum/forumdisplay.php?fid=7)
+--- قسم : تطوير تطبيقات الجوال Mobile Application Development (https://delphi4arab.net/forum/forumdisplay.php?fid=37)
+--- الموضوع : Android Record Audio to TIdBytes and play it (/showthread.php?tid=12326)



Android Record Audio to TIdBytes and play it - haniid - 18-06-2023

السلام عليكم 

محاولة
 تسجيل audio  فى TIdBytes و تشغيله ...
PHP كود :
uses
  Androidapi
.JNI.Media,
  Androidapi.Helpers,
  Androidapi.JNIBridge,
  IdGlobal; //indy 

PHP كود :
procedure PlayTIdBytesAudio(TIdBytesAudio: TIdBytes);
var
  Mintrack  : Integer;
  AudioPlay : JAudioTrack;
begin
  Mintrack 
:= TJAudioTrack.JavaClass.getMinBufferSize
                                                      
(
                                                        48000,
                                                        TJAudioFormat.JavaClass.CHANNEL_OUT_MONO,
                                                        TJAudioFormat.JavaClass.ENCODING_PCM_16BIT
                                                      
);

  if Length(TIdBytesAudio) < Mintrack then Exit;

  AudioPlay:= TJAudioTrack.JavaClass.init
                                         
(
                                            TJAudioManager.JavaClass.STREAM_MUSIC,
                                            48000,
                                            TJAudioFormat.JavaClass.CHANNEL_OUT_MONO,
                                            TJAudioFormat.JavaClass.ENCODING_PCM_16BIT,
                                            Length(TIdBytesAudio),
                                            TJAudioTrack.JavaClass.MODE_STREAM
                                         
);

  if ((AudioPlay as JAudioTrack).getPlayState <> 3 (* PLAYSTATE_PLAYING *))then
  
(AudioPlay as JAudioTrack).play;


  (AudioPlay as JAudioTrack).write(TBytesToTJavaArray(TBytes(TIdBytesAudio)), 0, Length(TIdBytesAudio));
end;


function 
RecordAudioToTIdBytes(BufferSize: Integer): TIdBytes;
var
   AudioRecorder    : JAudioRecord;
   MinBufferSize    : Integer;
   AudioArray       : TJavaArray<Byte>;
   BytesReaded      : Integer;
   BytesReadedCount : Integer;
   ArrayBytesReaded : TIdBytes;
begin
    MinBufferSize 
:= TJAudioRecord.JavaClass.getMinBufferSize
                                                             
(
                                                               48000,
                                                               TJAudioFormat.JavaClass.CHANNEL_IN_MONO,
                                                               TJAudioFormat.JavaClass.ENCODING_PCM_16BIT
                                                             
);

    if BufferSize < MinBufferSize then BufferSize := MinBufferSize;

    AudioArray:= TJavaArray<Byte>.Create(BufferSize) ;

    AudioRecorder:= TJAudioRecord.JavaClass.init
                                                
(
                                                  TJMediaRecorder_AudioSource.JavaClass.MIC,
                                                  48000,
                                                  TJAudioFormat.JavaClass.CHANNEL_IN_MONO,
                                                  TJAudioFormat.JavaClass.ENCODING_PCM_16BIT,
                                                  BufferSize
                                                
);



    (AudioRecorder as JAudioRecord).startRecording;

    BytesReadedCount := 0;

    while (BytesReadedCount < BufferSize) do
    begin
      SetLength
(ArrayBytesReaded, 0);
      BytesReaded := (AudioRecorder as JAudioRecord).read(AudioArray, 0, BufferSize);

      Inc(BytesReadedCount, BytesReaded);

      ArrayBytesReaded := TIdBytes(TJavaArrayToTBytes(AudioArray));
      IdGlobal.AppendBytes(Result, ArrayBytesReaded);
    end;

    (AudioRecorder as JAudioRecord).stop;
end; 


PHP كود :
   PlayTIdBytesAudio(RecordAudioToTIdBytes(400000 (* ≈ 4 soconde *))); 



RE: Android Record Audio to TIdBytes and play it - haniid - 14-12-2023

السلام عليكم 

محاولة ثانية باستعمال مكتبة bass 

كود :
https://github.com/TDDung/DelphiFMX-BASS

record to buffer 
read 
play

فى المرفق اسسيات فقط كمدخل للتعامل مع المكتبة فى الاندرويد 
مثلا يمكن ارسال الصوت عبر udp ...
 (live chat audio ...)


RE: Android Record Audio to TIdBytes and play it - haniid - 16-12-2023

نفس المثال السابق بدون استعمال المكتبة bass