125 lines
2.4 KiB
ObjectPascal

(*
this file is a part of audio components suite.
see the license file for more details.
you can contact me at mail@z0m3ie.de
This is an sample unit for an converter
*)
unit converter;
interface
uses
Classes, SysUtils;
type
{ TACSNewConverter }
TACSNewConverter = class(TACSCustomConverter)
private
protected
function GetBPS : Integer; override;
function GetCh : Integer; override;
function GetSR : Integer; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function GetData(Buffer : Pointer; BufferSize : Integer): Integer; override;
procedure Init; override;
procedure Flush; override;
published
end;
implementation
{ TACSNewConverter }
function TACSNewConverter.GetBPS: Integer;
begin
Result:=FInput.GetBPS;
end;
function TACSNewConverter.GetCh: Integer;
begin
Result:=FInput.GetCh;
end;
function TACSNewConverter.GetSR: Integer;
begin
Result:=FInput.GetSR;
end;
constructor TACSNewConverter.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
end;
destructor TACSNewConverter.Destroy;
begin
inherited Destroy;
end;
function TACSNewConverter.GetData(Buffer: Pointer; BufferSize: Integer): Integer;
var
l : Integer;
begin
if not Busy then raise EACSException.Create(strStreamnotopen);
if BufStart > BufEnd then
begin
if EndOfInput then
begin
Result := 0;
Exit;
end;
BufStart := 1;
while InputLock do;
InputLock := True;
l := Finput.GetData(@Yourbuffer[0], WantedSize);
InputLock := False;
if l = 0 then
begin
Result := 0;
Exit;
end;
InSize := l;
while (l<>0) and (InSize < WantedSize) do
begin
while InputLock do;
InputLock := True;
l := Finput.GetData(@YourBuffer[InSize], WantedSize - InSize);
InputLock := False;
Inc(InSize, l);
end;
if l = 0 then EndOfInput := True;
//Do Your DSP Stuff here
end;
if BufferSize < (BufEnd - BufStart + 1)
then Result := BufferSize
else Result := BufEnd - BufStart + 1;
Move(YourOutBuffer[BufStart-1], Buffer^, Result);
Inc(BufStart, Result);
Inc(FPosition, Result);
end;
procedure TACSNewConverter.Init;
begin
inherited Init;
end;
procedure TACSNewConverter.Flush;
begin
inherited Flush;
end;
end.