unit Demo1Main;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ACMOut, ACMIn, ACMConvertor, StdCtrls;type
TfmDemo1 = class(TForm)
ACMConvertor1: TACMConvertor;
ACMIn1: TACMIn;
ACMOut1: TACMOut;
Memo1: TMemo;
Button1: TButton;
procedure ACMIn1BufferFull(Sender: TObject; Data: Pointer;
Size: Integer);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
fmDemo1: TfmDemo1;implementation{$R *.DFM}procedure TfmDemo1.ACMIn1BufferFull(Sender: TObject; Data: Pointer;
Size: Integer);
begin
ACMOut1.Play(Data^,Size);
end;procedure TfmDemo1.Button1Click(Sender: TObject);
begin
ACMIn1.Open(ACMConvertor1.FormatIn);
ACMOut1.Open(ACMConvertor1.FormatIn);
end;end.
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ACMOut, ACMIn, ACMConvertor, StdCtrls;type
TfmDemo1 = class(TForm)
ACMConvertor1: TACMConvertor;
ACMIn1: TACMIn;
ACMOut1: TACMOut;
Memo1: TMemo;
Button1: TButton;
procedure ACMIn1BufferFull(Sender: TObject; Data: Pointer;
Size: Integer);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
fmDemo1: TfmDemo1;implementation{$R *.DFM}procedure TfmDemo1.ACMIn1BufferFull(Sender: TObject; Data: Pointer;
Size: Integer);
begin
ACMOut1.Play(Data^,Size);
end;procedure TfmDemo1.Button1Click(Sender: TObject);
begin
ACMIn1.Open(ACMConvertor1.FormatIn);
ACMOut1.Open(ACMConvertor1.FormatIn);
end;end.
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ScktComp, ACMConvertor, ACMOut, Spin;type
TfmMain = class(TForm)
Label1: TLabel;
edAddress: TEdit;
btnConnect: TButton;
btnDisconnect: TButton;
CSocket: TClientSocket;
lblStatus: TLabel;
ACMO: TACMOut;
ACMC: TACMConvertor;
Label2: TLabel;
seDelay: TSpinEdit;
procedure btnConnectClick(Sender: TObject);
procedure btnDisconnectClick(Sender: TObject);
procedure CSocketConnect(Sender: TObject; Socket: TCustomWinSocket);
procedure CSocketConnecting(Sender: TObject; Socket: TCustomWinSocket);
procedure CSocketDisconnect(Sender: TObject; Socket: TCustomWinSocket);
procedure CSocketLookup(Sender: TObject; Socket: TCustomWinSocket);
procedure FormCreate(Sender: TObject);
procedure CSocketRead(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
procedure Status(aMessage : String);
procedure UpdateButtons;
public
{ Public declarations }
end;var
fmMain: TfmMain;implementation{$R *.DFM}procedure TfmMain.btnConnectClick(Sender: TObject);
begin
CSocket.Address := edAddress.Text;
CSocket.Open;
end;procedure TfmMain.btnDisconnectClick(Sender: TObject);
begin
CSocket.Close;
ACMO.Close;
end;procedure TfmMain.CSocketConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Status('Connected');
UpdateButtons;
end;procedure TfmMain.CSocketConnecting(Sender: TObject;
Socket: TCustomWinSocket);
begin
Status('Connecting...');
end;procedure TfmMain.CSocketDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Status('Disconnected');
UpdateButtons;
end;procedure TfmMain.CSocketLookup(Sender: TObject; Socket: TCustomWinSocket);
begin
Status('Finding host');
end;procedure TfmMain.Status(aMessage: String);
begin
lblStatus.Caption := 'Status : ' + aMessage;
end;procedure TfmMain.FormCreate(Sender: TObject);
begin
Status('Ready');
end;procedure TfmMain.CSocketRead(Sender: TObject; Socket: TCustomWinSocket);
var
NewData : Pointer;
NewDataSize : Integer;
begin
Status('Received ' + IntToStr(Socket.ReceiveLength) + ' bytes');
with Socket do begin
NewDataSize := ReceiveLength;
GetMem(NewData, NewDataSize);
try
ReceiveBuf(NewData^, NewDataSize);
if not ACMO.Active then begin
ACMO.NumBuffers := seDelay.Value;
ACMO.Open(ACMC.FormatIn);
end;
ACMO.Play(NewData^, NewDataSize);
finally
Freemem(NewData);
end;
end;
end;procedure TfmMain.UpdateButtons;
begin
btnConnect.Enabled := not CSocket.Active;
btnDisconnect.Enabled := CSocket.Active;
seDelay.Enabled := not CSocket.Active;
end;end.
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ACMIn, ACMOut, ACMConvertor, ScktComp, StdCtrls;type
TfmMain = class(TForm)
ACMC: TACMConvertor;
ACMI: TACMIn;
SSocket: TServerSocket;
Button1: TButton;
procedure ACMIBufferFull(Sender: TObject; Data: Pointer;
Size: Integer);
procedure SSocketClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure SSocketClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure SSocketClientError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure TransmitData(Buffer : Pointer; Size : Integer);
procedure UpdateCount;
public
{ Public declarations }
end;var
fmMain: TfmMain;implementation{$R *.DFM}procedure TfmMain.ACMIBufferFull(Sender: TObject; Data: Pointer;
Size: Integer);
var
NewSize : Integer;
begin
Move(Data^,ACMC.BufferIn^,Size);
NewSize := ACMC.Convert;
TransmitData(ACMC.BufferOut,NewSize);
end;procedure TfmMain.UpdateCount;
begin
Caption := 'Connection count is ' + IntToStr(SSocket.Socket.ActiveConnections);
end;procedure TfmMain.SSocketClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
UpdateCount;
end;procedure TfmMain.SSocketClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
UpdateCount;
end;procedure TfmMain.TransmitData(Buffer : Pointer; Size: Integer);
var
X : Integer;
begin
for X:=0 to SSocket.Socket.ActiveConnections -1 do
try
SSocket.Socket.Connections[X].SendBuf(Buffer^,Size);
except
end;
end;procedure TfmMain.SSocketClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
ShowMessage('Encountered error ' + IntToStr(ErrorCode));
end;procedure TfmMain.Button1Click(Sender: TObject);
begin
ACMC.InputBufferSize := ACMC.FormatIn.Format.nAvgBytesPerSec;
ACMI.BufferSize := ACMC.InputBufferSize;
ACMC.Active := True;
ACMI.Open(ACMC.FormatIn);
UpdateCount;
end;end.