233 lines
5.4 KiB
ObjectPascal
233 lines
5.4 KiB
ObjectPascal
(*
|
|
this file is a part of audio components suite v 2.3 (delphi version).
|
|
copyright (c) 2002-2005 andrei borovsky. all rights reserved.
|
|
see the license file for more details.
|
|
you can contact me at acs@compiler4.net
|
|
this is the acs for delphi (windows) version of the unit.
|
|
*)
|
|
|
|
{
|
|
$Log: acs_stdaudio.pas,v $
|
|
Revision 1.6 2006/07/04 17:12:45 z0m3ie
|
|
ACS 2.4 alt wiederhergestellt (unterschiedliche Sampleformate ...)
|
|
|
|
Revision 1.4 2006/01/01 18:46:40 z0m3ie
|
|
*** empty log message ***
|
|
|
|
Revision 1.3 2005/12/30 11:10:57 z0m3ie
|
|
some corrections to lazarus-linux depending things
|
|
|
|
Revision 1.2 2005/12/26 17:31:39 z0m3ie
|
|
fixed some problems in acs_dsfiles
|
|
fixed some problems in acs_vorbis
|
|
reworked all buffers
|
|
|
|
Revision 1.1 2005/12/19 18:36:05 z0m3ie
|
|
*** empty log message ***
|
|
|
|
Revision 1.8 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.7 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.6 2005/10/05 20:26:36 z0m3ie
|
|
Linux changes
|
|
|
|
Revision 1.5 2005/10/02 16:51:31 z0m3ie
|
|
*** empty log message ***
|
|
|
|
Revision 1.4 2005/09/23 14:04:58 z0m3ie
|
|
*** empty log message ***
|
|
|
|
Revision 1.3 2005/09/18 19:28:59 z0m3ie
|
|
more progress on driver handling
|
|
|
|
Revision 1.2 2005/09/14 21:19:37 z0m3ie
|
|
*** empty log message ***
|
|
|
|
Revision 1.1 2005/09/13 21:53:45 z0m3ie
|
|
maked seperat driver (not complete jet)
|
|
|
|
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.3 2005/09/02 16:27:49 z0m3ie
|
|
*** empty log message ***
|
|
|
|
Revision 1.2 2005/08/28 20:31:17 z0m3ie
|
|
linux restructuring for 2.4
|
|
|
|
Revision 1.1 2005/08/25 20:18:00 z0m3ie
|
|
Version 2.4 restructure
|
|
TCDPlayer removed (fits not in component structure)
|
|
TMP3ToWavConverter removed (fits not in component structure)
|
|
|
|
Revision 1.4 2005/08/22 20:17:02 z0m3ie
|
|
changed Headers to log
|
|
changed mail adress
|
|
|
|
}
|
|
|
|
unit acs_stdaudio;
|
|
|
|
{$ifdef fpc}
|
|
{$mode delphi}
|
|
{$endif}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, ACS_Types, ACS_Classes,ACS_Audio,ACS_Strings
|
|
{$IFDEF MSWINDOWS}
|
|
, Windows, MMSystem
|
|
{$ELSE}
|
|
, Soundcard
|
|
{$ENDIF}
|
|
;
|
|
|
|
const
|
|
LATENCY = 110;
|
|
|
|
type
|
|
{$IFDEF MSWINDOWS}
|
|
{$IFDEF FPC}
|
|
TWaveInCapsA = WAVEINCAPSA;
|
|
TWaveInCaps = TWaveInCapsA;
|
|
|
|
TWaveHdr = WAVEHDR;
|
|
{$ENDIF}
|
|
|
|
PPWaveHdr = ^PWaveHdr;
|
|
{$ENDIF}
|
|
|
|
{ TStdAudioOut }
|
|
|
|
TStdAudioOut = class(TACSBaseAudioOut)
|
|
private
|
|
{$IFDEF MSWINDOWS}
|
|
BlockChain : PWaveHdr;
|
|
aBlock : Integer;
|
|
EOC : PPWaveHdr;
|
|
FReadChunks : Integer;
|
|
{$ENDIF}
|
|
_audio_fd : Integer;
|
|
procedure SetDevice(Ch : Integer);override;
|
|
function GetDeviceInfo : TACSDeviceInfo;override;
|
|
{$IFDEF MSWINDOWS}
|
|
procedure WriteBlock(P : Pointer; Len : Integer);
|
|
procedure AddBlockToChain(WH : PWaveHdr);
|
|
{$ENDIF}
|
|
function GetDeviceCount : Integer;override;
|
|
protected
|
|
procedure Done; override;
|
|
function DoOutput(Abort : Boolean):Boolean; override;
|
|
procedure Prepare; override;
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
end;
|
|
|
|
TStdAudioIn = class(TACSBaseAudioIn)
|
|
private
|
|
{$IFDEF MSWINDOWS}
|
|
BlockChain : PWaveHdr;
|
|
FBlocksCount : Integer;
|
|
aBlock : Integer;
|
|
EOC : PPWaveHdr;
|
|
{$ENDIF}
|
|
_audio_fd : Integer;
|
|
FOpened : Integer;
|
|
FRecBytes : Integer;
|
|
procedure OpenAudio;
|
|
procedure CloseAudio;
|
|
function GetBPS : Integer; override;
|
|
function GetCh : Integer; override;
|
|
function GetSR : Integer; override;
|
|
procedure SetDevice(Ch : Integer);override;
|
|
function GetDeviceInfo : TACSDeviceInfo;override;
|
|
function GetTotalTime : real; override;
|
|
{$IFDEF MSWINDOWS}
|
|
procedure NewBlock;
|
|
procedure AddBlockToChain(WH : PWaveHdr);
|
|
{$ENDIF}
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
function GetData(Buffer : Pointer; oBufferSize : Integer): Integer; override;
|
|
procedure Init; override;
|
|
procedure Flush; override;
|
|
end;
|
|
|
|
var
|
|
InputChannelsCount : Integer;
|
|
OutputChannelsCount : Integer;
|
|
|
|
function GetAudioDeviceInfo(DevID : Integer; OutputDev : Boolean) : TACSDeviceInfo;
|
|
|
|
implementation
|
|
|
|
var
|
|
CrSecI, CrSecO : TRTLCriticalSection;
|
|
|
|
{$IFDEF MSWINDOWS}
|
|
{$I windows\acs_audio.inc}
|
|
{$ELSE}
|
|
{$I linux\acs_audio.inc}
|
|
{$ENDIF}
|
|
|
|
function TStdAudioOut.GetDeviceInfo : TACSDeviceInfo;
|
|
begin
|
|
Result := GetAudioDeviceInfo(FBaseChannel, True);
|
|
end;
|
|
|
|
function TStdAudioIn.GetDeviceInfo : TACSDeviceInfo;
|
|
begin
|
|
Result := GetAudioDeviceInfo(FBaseChannel, False);
|
|
end;
|
|
|
|
function TStdAudioIn.GetTotalTime : real;
|
|
begin
|
|
Result := RecTime;
|
|
end;
|
|
|
|
constructor TStdAudioIn.Create;
|
|
begin
|
|
inherited Create(AOwner);
|
|
FBPS := 8;
|
|
FChan := 1;
|
|
FFreq := 8000;
|
|
FSize := -1;
|
|
FRecTime := 600;
|
|
BufferSize := $1000;
|
|
{$IFDEF MSWINDOWS}
|
|
FBlocksCount := 4;
|
|
{$ENDIF}
|
|
end;
|
|
|
|
function TStdAudioOut.GetDeviceCount : Integer;
|
|
begin
|
|
Result := OutputChannelsCount;
|
|
end;
|
|
|
|
initialization
|
|
{$IFDEF MSWINDOWS}
|
|
InitializeCriticalSection(CrSecI);
|
|
InitializeCriticalSection(CrSecO);
|
|
{$ENDIF}
|
|
CountChannels;
|
|
RegisterAudioOut('Wavemapper',TStdAudioOut,LATENCY);
|
|
RegisterAudioIn('Wavemapper',TStdAudioIn,LATENCY);
|
|
|
|
finalization
|
|
{$IFDEF MSWINDOWS}
|
|
DeleteCriticalSection(CrSecI);
|
|
DeleteCriticalSection(CrSecO);
|
|
{$ENDIF}
|
|
|
|
end.
|