//接收并发送麦克风语音
procedure TcontForm.ACMWaveIn1Data(data: Pointer; size: Integer);
 var pchData:pChar;
     memStream:TMemoryStream;
begin 
   Try
     pchData:=pchar(data);
     If pchData[1]='' then Exit;
     //---接受麦克风语音
     memStream:=TMemoryStream.Create;
     Try
       memStream.Write(pchData^,size);
       //idUDPClient1.BroadcastEnabled:=True;//用广播功能
       //发送/接收buffer不够大引起的。用setsockopt将socket的send/recv的buffer加大
       //因为UDP数据包有大小限制,这里如果超出部分,就没有传输,完全可以发几次发出去
       If memStream.Size>idUDPClient1.BufferSize
         then idUDPClient1.SendBuffer(memStream.Memory^,IdUDPClient1.BufferSize)
         else idUDPClient1.SendBuffer(memStream.Memory^,memStream.Size);
       hintBar1.Panels[1].Text:=IntToStr(IdUDPClient1.BufferSize)+'/'+IntToStr(memStream.Size);
     Finally
       memStream.Free;
     End;
   Except End;
end;  //接收并播放语音
procedure TcontForm.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle); 
 var recData:String;
     pcharPlayStr:pchar;
     myStream:TMemoryStream;
begin 
     //发送/接收buffer不够大引起的。用setsockopt将socket的send/recv的buffer加大
     myStream:=TMemoryStream.create;
     Try
       myStream.LoadFromStream(AData);
       Setlength(recdata,myStream.Size);
       myStream.Position :=0;
       myStream.Read(recdata[1],myStream.Size);//数据流转换成字符串
       pcharPlayStr:=pchar(recData);
       ACMWaveOut1.PlayBack(pcharPlayStr,AData.Size);//播放接收到的数据
     Finally
       myStream.Free;
     End;
end;贴上源码,请各位大侠帮帮忙