You've already forked lazarus-ccr
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@67 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
220
components/acs/Src/classes/acs_streams.pas
Normal file
220
components/acs/Src/classes/acs_streams.pas
Normal file
@@ -0,0 +1,220 @@
|
||||
(*
|
||||
this file is a part of audio components suite v 2.3.
|
||||
copyright (c) 2002-2005 andrei borovsky. all rights reserved.
|
||||
see the license file for more details.
|
||||
you can contact me at mail@z0m3ie.de
|
||||
*)
|
||||
|
||||
{
|
||||
$Log: acs_streams.pas,v $
|
||||
Revision 1.5 2006/08/31 20:10:54 z0m3ie
|
||||
*** empty log message ***
|
||||
|
||||
Revision 1.4 2006/07/04 17:12:45 z0m3ie
|
||||
ACS 2.4 alt wiederhergestellt (unterschiedliche Sampleformate ...)
|
||||
|
||||
Revision 1.1 2005/12/19 18:34:35 z0m3ie
|
||||
*** empty log message ***
|
||||
|
||||
Revision 1.4 2005/12/04 16:54:34 z0m3ie
|
||||
All classes are renamed, Style TACS... than T... to avoid conflicts with other components (eg TMixer is TACSMixer now)
|
||||
|
||||
Revision 1.3 2005/11/27 16:50:33 z0m3ie
|
||||
add ACS VolumeQuerry
|
||||
make ACS_VolumeQuerry localizeable
|
||||
some little errorfixes (buffersize for linuxdrivers was initially 0)
|
||||
make TAudioIn workable
|
||||
|
||||
Revision 1.2 2005/09/13 21:54:11 z0m3ie
|
||||
acs is localizeable now (ACS_Strings)
|
||||
|
||||
Revision 1.1 2005/09/12 22:04:52 z0m3ie
|
||||
modified structure again, fileformats are now in an sperat folder.
|
||||
all File In/Out classes are capsulated from TFileIn and TFileOut
|
||||
|
||||
Revision 1.2 2005/08/22 20:17:01 z0m3ie
|
||||
changed Headers to log
|
||||
changed mail adress
|
||||
|
||||
}
|
||||
|
||||
|
||||
unit acs_streams;
|
||||
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, ACS_Classes, ACS_Strings;
|
||||
|
||||
const
|
||||
|
||||
OUTBUF_SIZE = $4000;
|
||||
|
||||
|
||||
type
|
||||
|
||||
TACSStreamOut = class(TACSStreamedOutput)
|
||||
private
|
||||
function GetSR : Integer;
|
||||
function GetBPS : Integer;
|
||||
function GetCh : Integer;
|
||||
protected
|
||||
procedure Done; override;
|
||||
function DoOutput(Abort : Boolean):Boolean; override;
|
||||
procedure Prepare; override;
|
||||
public
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
destructor Destroy; override;
|
||||
property OutSampleRate : Integer read GetSR;
|
||||
property OutBitsPerSample : Integer read GetBPS;
|
||||
property OutChannles : Integer read GetCh;
|
||||
end;
|
||||
|
||||
TACSStreamIn = class(TACSStreamedInput)
|
||||
private
|
||||
FBPS, FChan, FFreq : Integer;
|
||||
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
|
||||
property InBitsPerSample : Integer read FBPS write FBPS;
|
||||
property InChannels : Integer read FChan write FChan;
|
||||
property InSampleRate : Integer read FFreq write FFreq;
|
||||
end;
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
procedure TACSStreamOut.Prepare;
|
||||
begin
|
||||
if not FStreamAssigned then
|
||||
raise EACSException.Create(strStreamObjectnotassigned);
|
||||
FInput.Init;
|
||||
end;
|
||||
|
||||
procedure TACSStreamOut.Done;
|
||||
begin
|
||||
FInput.Flush;
|
||||
end;
|
||||
|
||||
function TACSStreamOut.DoOutput(Abort : Boolean):Boolean;
|
||||
var
|
||||
Len : Integer;
|
||||
P : Pointer;
|
||||
begin
|
||||
// No exceptions Here
|
||||
Result := True;
|
||||
if not Busy then Exit;
|
||||
if Abort or (not CanOutput) then
|
||||
begin
|
||||
Result := False;
|
||||
Exit;
|
||||
end;
|
||||
GetMem(P, OUTBUF_SIZE);
|
||||
while InputLock do;
|
||||
InputLock := True;
|
||||
Len := Finput.GetData(P, OUTBUF_SIZE);
|
||||
InputLock := False;
|
||||
if Len > 0 then
|
||||
begin
|
||||
Result := True;
|
||||
FStream.WriteBuffer(P^, Len);
|
||||
end
|
||||
else Result := False;
|
||||
FreeMem(P);
|
||||
end;
|
||||
|
||||
constructor TACSStreamOut.Create;
|
||||
begin
|
||||
inherited Create(AOwner);
|
||||
end;
|
||||
|
||||
destructor TACSStreamOut.Destroy;
|
||||
begin
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
constructor TACSStreamIn.Create;
|
||||
begin
|
||||
inherited Create(AOwner);
|
||||
FBPS := 8;
|
||||
FChan := 1;
|
||||
FFreq := 8000;
|
||||
FSize := -1;
|
||||
end;
|
||||
|
||||
destructor TACSStreamIn.Destroy;
|
||||
begin
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
procedure TACSStreamIn.Init;
|
||||
begin
|
||||
if Busy then raise EACSException.Create(strBusy);
|
||||
if not Assigned(FStream) then raise EACSException.Create(strStreamObjectnotassigned);
|
||||
FPosition := FStream.Position;
|
||||
FBusy := True;
|
||||
FSize := FStream.Size;
|
||||
end;
|
||||
|
||||
procedure TACSStreamIn.Flush;
|
||||
begin
|
||||
// FStream.Position := 0;
|
||||
FBusy := False;
|
||||
end;
|
||||
|
||||
function TACSStreamIn.GetData(Buffer : Pointer; BufferSize : Integer): Integer;
|
||||
begin
|
||||
Result := FStream.Read(Buffer^, BufferSize);
|
||||
FPosition := FStream.Position;
|
||||
// Inc(FPosition, Result);
|
||||
if FPosition >= FSize then
|
||||
Result := 0;
|
||||
end;
|
||||
|
||||
function TACSStreamOut.GetSR : Integer;
|
||||
begin
|
||||
if not Assigned(Input) then
|
||||
raise EACSException.Create(strInputnotassigned);
|
||||
Result := FInput.SampleRate;
|
||||
end;
|
||||
|
||||
function TACSStreamOut.GetBPS : Integer;
|
||||
begin
|
||||
if not Assigned(Input) then
|
||||
raise EACSException.Create(strInputnotassigned);
|
||||
Result := FInput.BitsPerSample;
|
||||
end;
|
||||
|
||||
function TACSStreamOut.GetCh : Integer;
|
||||
begin
|
||||
if not Assigned(Input) then
|
||||
raise EACSException.Create(strInputnotassigned);
|
||||
Result := FInput.Channels;
|
||||
end;
|
||||
|
||||
function TACSStreamIn.GetBPS : Integer;
|
||||
begin
|
||||
Result := FBPS
|
||||
end;
|
||||
|
||||
function TACSStreamIn.GetCh : Integer;
|
||||
begin
|
||||
Result := FChan;
|
||||
end;
|
||||
|
||||
function TACSStreamIn.GetSR : Integer;
|
||||
begin
|
||||
Result := Self.FFreq;
|
||||
end;
|
||||
|
||||
|
||||
end.
|
Reference in New Issue
Block a user