IdUDPServer의 Receive시에 AData Stream의 데이터를 받아서 처리하는 부분입니다.
Data의 Header부분을 제외한 부분만 잘라서 버퍼에 누적하면서
그 버퍼의 Data를 실시간으로 재생하는 프로그램입니다.
문제는 2line 부터 수행이 안되구요.. 2 line을 주석처리하면 4 line에서 뻑 맛갑니다.
AData 에서 Header부분을 제외한 데이터를 복사해서 FPCMData라는 Stream을 생성한다음
할당을 하고.. 고것을 Port의 Stream에 누적을 했습니다..
대충 아시겠죠?
제가 워낙 초보라서.. 많이 허접해요 욕하지 마시고.. 관심 부탁드립니다..
소스는 아래와 같습니다..
=================================================================================
if ( FPCMData = nil ) then FPCMData := TStream.Create;
FPCMData.Position := 0;
AData.Position := SizeOf(lcs_rsp_msg_vqt_se); // Header를 제외한 부분을 FPCMData로 복사 (80 byte)
Adata.ReadBuffer(FPCMData, AData.Size - SizeOf(lcs_rsp_msg_vqt_se));
Port.AddPCMData( FPCMData, FPCMData.Size ); // 80byte를 Port의 Stream에 누적.
FACMPlayer.Play( FPCMData ); // 80byte Stream 데어터를 재생.
if ( FPCMData <> nil ) then FPCMData.Free;
-----------------------------------------------
// Port 클래스의 Stream을 차곡차곡 누적하는 함수..
procedure TPort.AddPCMData(Buff: TStream; _Size: Integer);
var
pos: Integer;
begin
pos := FData.Size;
FData.Position := pos;
FData.Write(Buff, _Size);
end;