السلام عليكم
محاولة
تسجيل audio فى TIdBytes و تشغيله ...
محاولة
تسجيل 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 *)));