delphi4arab منتديات دلفي للعرب

نسخة كاملة : Android Record Audio to TIdBytes and play it
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم 

محاولة
 تسجيل 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 *))); 
السلام عليكم 

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

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

record to buffer 
read 
play

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