程序代码如下:服务器端
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ACMWaveIn, ACMDialog, ACMWaveOut, IdBaseComponent, IdComponent,
  IdUDPBase,IdSocketHandle,IdUDPServer, StdCtrls;type
  TForm1 = class(TForm)
  IdUDPServer1: TIdUDPServer;
  ACMWaveOut1: TACMWaveOut;
  ACMDialog1: TACMDialog;
  ACMWaveIn1: TACMWaveIn;
  Memo1: TMemo;
  Button1: TButton;
  procedure FormCreate(Sender: TObject);
  procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
  private
  { Private declarations }
  public
  { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}
type   
  TGSM610=packed record //自定义音频文件头
  wFormatTag: Word;   
  nChannels: Word;
  nSamplesPerSec: DWORD;   
  nAvgBytesPerSec: DWORD;   
  nBlockAlign: Word;
  wBitsPerSample: Word;
  cbSize: Word;
  wSamplesPerBlock:word;
  end;procedure TForm1.FormCreate(Sender: TObject);
var
  format: Pointer;
  GSM:TGSM610;
begin
  with GSM do
  begin
  wFormatTag:=$31;
  nChannels:=1;
  wBitsPerSample:=0;
  nSamplesPerSec:=8000;
  nBlockAlign:=65;
  nAvgBytesPerSec:=1625;
  cbSize:=2;
  wSamplesPerBlock:=$140;
  end;
  format:=@gsm;
  IdUDPServer1.DefaultPort:=8000;
  IdUDPServer1.Active:=true;
  // if format=nil then exit;
  ACMWaveOut1.Open(format);end;procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var
  recData:string;
  pcharplaystr:pchar;
  myStream:TMemoryStream;
begin
  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;end.
//----------------------客户端如下unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ACMDialog, ACMWaveOut, ACMWaveIn, StdCtrls, IdBaseComponent,
  IdComponent, IdTCPConnection, IdTCPClient, IdUDPClient, IdUDPBase,
  IdUDPServer;type
  TForm1 = class(TForm)
  Button1: TButton;
  ACMWaveIn1: TACMWaveIn;
  ACMWaveOut1: TACMWaveOut;
  ACMDialog1: TACMDialog;
  IdUDPServer1: TIdUDPServer;
  IdUDPClient1: TIdUDPClient;
  Edit1: TEdit;
  Button2: TButton;
  procedure FormClose(Sender: TObject; var Action: TCloseAction);
  procedure Button1Click(Sender: TObject);
  procedure ACMWaveIn1Data(data: Pointer; size: Integer);
  procedure Button2Click(Sender: TObject);
  private
  { Private declarations }
  public
  { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}type
  TGSM610=packed record //自定义音频文件头
  wFormatTag: Word;   
  nChannels: Word;   
  nSamplesPerSec: DWORD;   
  nAvgBytesPerSec: DWORD;   
  nBlockAlign: Word;
  wBitsPerSample: Word;   
  cbSize: Word;   
  wSamplesPerBlock:word;   
  end;   var   
  buf: array[0..65535] of byte;   
  bufsize: Integer = 0;   
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  idudpclient1.Active:=false;
end;procedure TForm1.Button1Click(Sender: TObject);
var   
  format: Pointer;   
  GSM:TGSM610;   
begin   
  with GSM do
  begin   
  wFormatTag:=$31;   
  nChannels:=1;   
  wBitsPerSample:=0;   
  nSamplesPerSec:=8000;
  nBlockAlign:=65;   
  nAvgBytesPerSec:=1625;   
  cbSize:=2;   
  wSamplesPerBlock:=$140;   
  end;   
  format:=@gsm;
  ACMWaveIn1.Open(format);
end;   procedure TForm1.ACMWaveIn1Data(data: Pointer; size: Integer);
var
pchData:pChar;
memStream:TMemoryStream;
begin
  pchData:=pchar(data);
  if pchData[1]='' then exit;
  memStream:=TMemoryStream.Create;
  try
  memStream.Write(pchData^,size);
  idudpclient1.SendBuffer(memStream.Memory^,memStream.Size);
  finally
  memStream.Free;
  end;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
IdUDPClient1.Host:=edit1.Text;
IdUDPClient1.Port:=8000;
if not idudpclient1.Active then
  idudpclient1.Active:=true;
    
end;end.怎么就不能发声呢,