123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630 |
- {
- This file is part of the Free Pascal run time library.
- Copyright (c) 2005 Karoly Balogh for Genesi S.a.r.l.
- ahi.library interface unit for MorphOS/PowerPC
- Based on work of Nils Sjoholm member of the Amiga RTL
- development team.
- MorphOS port was done on a free Pegasos II/G4 machine
- provided by Genesi S.a.r.l. <www.genesi.lu>
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- **********************************************************************}
- {$PACKRECORDS 2}
- unit AHI;
- interface
- uses exec, utility;
- var
- AHIBase: PLibrary;
- type
- PFixed = ^Fixed;
- Fixed = LONGINT;
- { A fixed-point value, 16 bits
- to the left of the point and
- 16 bits to the right }
- type
- Psposition = ^sposition;
- sposition = Fixed;
- { AHIAudioCtrl }
- { Lots of private data follows! }
- PAHIAudioCtrl = ^tAHIAudioCtrl;
- tAHIAudioCtrl = record
- ahiac_UserData : Pointer;
- end;
- { AHISoundMessage }
- PAHISoundMessage = ^tAHISoundMessage;
- tAHISoundMessage = record
- ahism_Channel : Word;
- end;
- { AHIRecordMessage }
- PAHIRecordMessage = ^tAHIRecordMessage;
- tAHIRecordMessage = record
- ahirm_Type : Cardinal; { Format of buffer (object) }
- ahirm_Buffer : Pointer; { Pointer to the sample array }
- ahirm_Length : Cardinal; { Number of sample frames in buffer }
- end;
- { AHISampleInfo }
- PAHISampleInfo = ^tAHISampleInfo;
- tAHISampleInfo = record
- ahisi_Type : Cardinal; { Format of samples }
- ahisi_Address : Pointer; { Address to array of samples }
- ahisi_Length : Cardinal; { Number of samples in array }
- end;
- { AHIAudioModeRequester }
- PAHIAudioModeRequester = ^tAHIAudioModeRequester;
- tAHIAudioModeRequester = record
- ahiam_AudioID : Cardinal; { Selected audio mode }
- ahiam_MixFreq : Cardinal; { Selected mixing/sampling frequency }
- ahiam_LeftEdge : WORD; { Coordinates of requester on exit }
- ahiam_TopEdge : WORD;
- ahiam_Width : WORD;
- ahiam_Height : WORD;
- ahiam_InfoOpened : Boolean; { Info window opened on exit? }
- ahiam_InfoLeftEdge : WORD; { Last coordinates of Info window }
- ahiam_InfoTopEdge : WORD;
- ahiam_InfoWidth : WORD;
- ahiam_InfoHeight : WORD;
- ahiam_UserData : Pointer; { You can store your own data here }
- { Lots of private data follows! }
- end;
- { AHIEffMasterVolume }
- PAHIEffMasterVolume = ^tAHIEffMasterVolume;
- tAHIEffMasterVolume = record
- ahie_Effect : Cardinal; { Set to AHIET_MASTERVOLUME }
- ahiemv_Volume : Fixed; { See autodocs for range! }
- end;
- { AHIEffOutputBuffer }
- PAHIEffOutputBuffer = ^tAHIEffOutputBuffer;
- tAHIEffOutputBuffer = record
- ahie_Effect : Cardinal; { Set to AHIET_OUTPUTBUFFER }
- ahieob_Func : PHook;
- { These fields are filled by AHI }
- ahieob_Type : Cardinal; { Format of buffer }
- ahieob_Buffer : Pointer; { Pointer to the sample array }
- ahieob_Length : Cardinal; { Number of sample frames in buffer }
- end;
- { AHIEffDSPMask (V4) }
- PAHIEffDSPMask = ^tAHIEffDSPMask;
- tAHIEffDSPMask = record
- ahie_Effect : Cardinal; { Set to AHIET_DSPMASK }
- ahiedm_Channels : Word; { Number of elements in array }
- ahiedm_Mask : array[0..0] of Byte; { Here follows the array }
- end;
- const
- AHIEDM_WET = 0;
- AHIEDM_DRY = 1;
- { AHIEffDSPEcho (V4) }
- type
- PAHIDSPEcho = ^tAHIDSPEcho;
- tAHIDSPEcho = record
- ahie_Effect : Cardinal; { Set to AHIET_DSPECHO }
- ahiede_Delay : Cardinal; { In samples }
- ahiede_Feedback : Fixed;
- ahiede_Mix : Fixed;
- ahiede_Cross : Fixed;
- end;
- { AHIEffChannelInfo (V4) }
- PAHIEffChannelInfo = ^tAHIEffChannelInfo;
- tAHIEffChannelInfo = record
- ahie_Effect : Cardinal; { Set to AHIET_CHANNELINFO }
- ahieci_Func : PHook;
- ahieci_Channels : Word;
- ahieci_Pad : Word;
- { The rest is filled by AHI }
- ahieci_Offset : array[0..0] of Cardinal; { The array follows }
- end;
- { TAGS }
- const
- AHI_TagBase = TAG_USER;
- AHI_TagBaseR = AHI_TagBase or $8000;
- { AHI_AllocAudioA tags }
- { Desired audio mode }
- AHIA_AudioID = AHI_TagBase + 1;
- { Suggested mixing frequency }
- AHIA_MixFreq = AHI_TagBase + 2;
- { Suggested number of channels }
- AHIA_Channels = AHI_TagBase + 3;
- { Number of sounds to use }
- AHIA_Sounds = AHI_TagBase + 4;
- { End-of-Sound Hook }
- AHIA_SoundFunc = AHI_TagBase + 5;
- { Player Hook }
- AHIA_PlayerFunc = AHI_TagBase + 6;
- { Frequency for player Hook (Fixed) }
- AHIA_PlayerFreq = AHI_TagBase + 7;
- { Minimum Frequency for player Hook }
- AHIA_MinPlayerFreq = AHI_TagBase + 8;
- { Maximum Frequency for player Hook }
- AHIA_MaxPlayerFreq = AHI_TagBase + 9;
- { Sample recording Hook }
- AHIA_RecordFunc = AHI_TagBase + 10;
- { What to put in ahiac_UserData }
- AHIA_UserData = AHI_TagBase + 11;
- { AHI_PlayA tags (V4) }
- { All command tags should be... }
- AHIP_BeginChannel = AHI_TagBase + 40;
- { ... enclosed by these tags. }
- AHIP_EndChannel = AHI_TagBase + 41;
- AHIP_Freq = AHI_TagBase + 50;
- AHIP_Vol = AHI_TagBase + 51;
- AHIP_Pan = AHI_TagBase + 52;
- AHIP_Sound = AHI_TagBase + 53;
- AHIP_Offset = AHI_TagBase + 54;
- AHIP_Length = AHI_TagBase + 55;
- AHIP_LoopFreq = AHI_TagBase + 60;
- AHIP_LoopVol = AHI_TagBase + 61;
- AHIP_LoopPan = AHI_TagBase + 62;
- AHIP_LoopSound = AHI_TagBase + 63;
- AHIP_LoopOffset = AHI_TagBase + 64;
- AHIP_LoopLength = AHI_TagBase + 65;
- { AHI_ControlAudioA tags }
- { Booleanean }
- AHIC_Play = AHI_TagBase + 80;
- { Booleanean }
- AHIC_Record = AHI_TagBase + 81;
- AHIC_MonitorVolume = AHI_TagBase + 82;
- { ti_Data is pointer to Fixed (LONG) }
- AHIC_MonitorVolume_Query = AHI_TagBase + 83;
- { ti_Data is pointer to Cardinal }
- AHIC_MixFreq_Query = AHI_TagBase + 84;
- { --- New for V2, they will be ignored by V1 --- }
- AHIC_InputGain = AHI_TagBase + 85;
- { ti_Data is pointer to Fixed (LONG) }
- AHIC_InputGain_Query = AHI_TagBase + 86;
- AHIC_OutputVolume = AHI_TagBase + 87;
- { ti_Data is pointer to Fixed (LONG) }
- AHIC_OutputVolume_Query = AHI_TagBase + 88;
- AHIC_Input = AHI_TagBase + 89;
- { ti_Data is pointer to Cardinal }
- AHIC_Input_Query = AHI_TagBase + 90;
- AHIC_Output = AHI_TagBase + 91;
- { ti_Data is pointer to Cardinal }
- AHIC_Output_Query = AHI_TagBase + 92;
- { AHI_GetAudioAttrsA tags }
- AHIDB_AudioID = AHI_TagBase + 100;
- { Pointer to name of driver }
- AHIDB_Driver = AHI_TagBaseR + 101;
- { Private! }
- AHIDB_Flags = AHI_TagBase + 102;
- { Booleanean }
- AHIDB_Volume = AHI_TagBase + 103;
- { Booleanean }
- AHIDB_Panning = AHI_TagBase + 104;
- { Booleanean }
- AHIDB_Stereo = AHI_TagBase + 105;
- { Booleanean }
- AHIDB_HiFi = AHI_TagBase + 106;
- { Booleanean }
- AHIDB_PingPong = AHI_TagBase + 107;
- { Private! }
- AHIDB_MultTable = AHI_TagBase + 108;
- { Pointer to name of this mode }
- AHIDB_Name = AHI_TagBaseR + 109;
- { Output bits }
- AHIDB_Bits = AHI_TagBase + 110;
- { Max supported channels }
- AHIDB_MaxChannels = AHI_TagBase + 111;
- { Min mixing freq. supported }
- AHIDB_MinMixFreq = AHI_TagBase + 112;
- { Max mixing freq. supported }
- AHIDB_MaxMixFreq = AHI_TagBase + 113;
- { Booleanean }
- AHIDB_Record = AHI_TagBase + 114;
- AHIDB_Frequencies = AHI_TagBase + 115;
- { ti_Data is frequency index }
- AHIDB_FrequencyArg = AHI_TagBase + 116;
- AHIDB_Frequency = AHI_TagBase + 117;
- { Pointer to driver author name }
- AHIDB_Author = AHI_TagBase + 118;
- { Pointer to driver copyright notice }
- AHIDB_Copyright = AHI_TagBase + 119;
- { Pointer to driver version string }
- AHIDB_Version = AHI_TagBase + 120;
- { Pointer to driver annotation text }
- AHIDB_Annotation = AHI_TagBase + 121;
- { Specifies the string buffer size }
- AHIDB_BufferLen = AHI_TagBase + 122;
- { ti_Data is frequency! }
- AHIDB_IndexArg = AHI_TagBase + 123;
- AHIDB_Index = AHI_TagBase + 124;
- { Booleanean }
- AHIDB_Realtime = AHI_TagBase + 125;
- { It's sample frames }
- AHIDB_MaxPlaySamples = AHI_TagBase + 126;
- { It's sample frames }
- AHIDB_MaxRecordSamples = AHI_TagBase + 127;
- { Booleanean }
- AHIDB_FullDuplex = AHI_TagBase + 129;
- { --- New for V2, they will be ignored by V1 --- }
- AHIDB_MinMonitorVolume = AHI_TagBase + 130;
- AHIDB_MaxMonitorVolume = AHI_TagBase + 131;
- AHIDB_MinInputGain = AHI_TagBase + 132;
- AHIDB_MaxInputGain = AHI_TagBase + 133;
- AHIDB_MinOutputVolume = AHI_TagBase + 134;
- AHIDB_MaxOutputVolume = AHI_TagBase + 135;
- AHIDB_Inputs = AHI_TagBase + 136;
- { ti_Data is input index }
- AHIDB_InputArg = AHI_TagBase + 137;
- AHIDB_Input = AHI_TagBase + 138;
- AHIDB_Outputs = AHI_TagBase + 139;
- { ti_Data is input index }
- AHIDB_OutputArg = AHI_TagBase + 140;
- AHIDB_Output = AHI_TagBase + 141;
- { --- New for V4, they will be ignored by V2 and earlier --- }
- { Private! }
- AHIDB_Data = AHI_TagBaseR + 142;
- { AHI_BestAudioIDA tags }
- { --- New for V4, they will be ignored by V2 and earlier --- }
- AHIB_Dizzy = AHI_TagBase + 190;
- { AHI_AudioRequestA tags }
- { Window control }
- { Parent window }
- AHIR_Window = AHI_TagBase + 200;
- { Screen to open on if no window }
- AHIR_Screen = AHI_TagBase + 201;
- { Name of public screen }
- AHIR_PubScreenName = AHI_TagBase + 202;
- { Allocate private IDCMP? }
- AHIR_PrivateIDCMP = AHI_TagBase + 203;
- { Function to handle IntuiMessages }
- AHIR_IntuiMsgFunc = AHI_TagBase + 204;
- { Block input in AHIR_Window? }
- AHIR_SleepWindow = AHI_TagBase + 205;
- { What to put in ahiam_UserData }
- AHIR_UserData = AHI_TagBase + 206;
- { Text display }
- { Text font to use for gadget text }
- AHIR_TextAttr = AHI_TagBase + 220;
- { Locale to use for text }
- AHIR_Locale = AHI_TagBase + 221;
- { Title of requester }
- AHIR_TitleText = AHI_TagBase + 222;
- { Positive gadget text }
- AHIR_PositiveText = AHI_TagBase + 223;
- { Negative gadget text }
- AHIR_NegativeText = AHI_TagBase + 224;
- { Initial settings }
- { Initial requester coordinates }
- AHIR_InitialLeftEdge = AHI_TagBase + 240;
- AHIR_InitialTopEdge = AHI_TagBase + 241;
- { Initial requester dimensions }
- AHIR_InitialWidth = AHI_TagBase + 242;
- AHIR_InitialHeight = AHI_TagBase + 243;
- { Initial audio mode id }
- AHIR_InitialAudioID = AHI_TagBase + 244;
- { Initial mixing/sampling frequency }
- AHIR_InitialMixFreq = AHI_TagBase + 245;
- { Info window initially opened? }
- AHIR_InitialInfoOpened = AHI_TagBase + 246;
- { Initial Info window coords. }
- AHIR_InitialInfoLeftEdge = AHI_TagBase + 247;
- AHIR_InitialInfoTopEdge = AHI_TagBase + 248;
- { Not used! }
- AHIR_InitialInfoWidth = AHI_TagBase + 249;
- { Not used! }
- AHIR_InitialInfoHeight = AHI_TagBase + 250;
- { Options }
- { Allow selection of mixing frequency? }
- AHIR_DoMixFreq = AHI_TagBase + 260;
- { Allow selection of default mode? (V4) }
- AHIR_DoDefaultMode = AHI_TagBase + 261;
- { Filtering }
- { Pointer to filter taglist }
- AHIR_FilterTags = AHI_TagBase + 270;
- { Function to filter mode id's }
- AHIR_FilterFunc = AHI_TagBase + 271;
- { DEFS }
- AHINAME : PChar = 'ahi.device';
- { Invalid Audio ID }
- AHI_INVALID_ID = not (0);
- { Only for AHI_AllocAudioA()! }
- AHI_DEFAULT_ID = $00000000;
- { Special sample render Audio ID }
- AHI_LOOPBACK_ID = $00000001;
- { Only for AHI_AllocAudioA()! }
- AHI_DEFAULT_FREQ = 0;
- { Special frequency for AHI_SetFreq() }
- AHI_MIXFREQ = not (0);
- { Turns a channel off }
- AHI_NOSOUND = $ffff;
- { Set#? Flags }
- AHISF_IMM = 1 shl 0;
- AHISB_IMM = 0;
- { Effect Types }
- { OR with effect to disable }
- AHIET_CANCEL = 1 shl 31;
- AHIET_MASTERVOLUME = 1;
- AHIET_OUTPUTBUFFER = 2;
- { --- New for V4 --- }
- AHIET_DSPMASK = 3;
- AHIET_DSPECHO = 4;
- AHIET_CHANNELINFO = 5;
- { Sound Types }
- { Private }
- AHIST_NOTYPE = not (0);
- { 8 or 16 bit sample }
- AHIST_SAMPLE = 0;
- { Dynamic sample }
- AHIST_DYNAMICSAMPLE = 1;
- { The input from your sampler }
- AHIST_INPUT = 1 shl 29;
- { Private }
- AHIST_BW = 1 shl 30;
- { Sample types }
- { Note that only AHIST_M8S, AHIST_S8S, AHIST_M16S and AHIST_S16S
- are supported by AHI_LoadSound(). }
- { Mono, 8 bit signed (BYTE) }
- AHIST_M8S = 0;
- { Mono, 16 bit signed (WORD) }
- AHIST_M16S = 1;
- { Stereo, 8 bit signed (2×BYTE) }
- AHIST_S8S = 2;
- { Stereo, 16 bit signed (2×WORD) }
- AHIST_S16S = 3;
- { Mono, 32 bit signed (LONG) }
- AHIST_M32S = 8;
- { Stereo, 32 bit signed (2×LONG) }
- AHIST_S32S = 10;
- { OBSOLETE! }
- AHIST_M8U = 4;
- { Error codes }
- { No error }
- AHIE_OK = 0;
- { Out of memory }
- AHIE_NOMEM = 1;
- { Unknown sound type }
- AHIE_BADSOUNDTYPE = 2;
- { Unknown/unsupported sample type }
- AHIE_BADSAMPLETYPE = 3;
- { User-triggered abortion }
- AHIE_ABORTED = 4;
- { Error, but unknown }
- AHIE_UNKNOWN = 5;
- { CMD_WRITE/CMD_READ failure }
- AHIE_HALFDUPLEX = 6;
- { DEVICE INTERFACE DEFINITIONS FOLLOWS }
- { Device units }
- AHI_DEFAULT_UNIT = 0;
- AHI_NO_UNIT = 255;
- { The preference file }
- ID_AHIU = $41484955;
- ID_AHIG = $41484947;
- type
- PAHIUnitPrefs = ^tAHIUnitPrefs;
- tAHIUnitPrefs = record
- ahiup_Unit : Byte;
- ahiup_Pad : Byte;
- ahiup_Channels : Word;
- ahiup_AudioMode : Cardinal;
- ahiup_Frequency : Cardinal;
- ahiup_MonitorVolume : Fixed;
- ahiup_InputGain : Fixed;
- ahiup_OutputVolume : Fixed;
- ahiup_Input : Cardinal;
- ahiup_Output : Cardinal;
- end;
- PAHIGlobalPrefs = ^tAHIGlobalPrefs;
- tAHIGlobalPrefs = record
- ahigp_DebugLevel : Word; { Range: 0-3 (for None, Low,}
- ahigp_DisableSurround : Boolean; { High and All) }
- ahigp_DisableEcho : Boolean;
- ahigp_FastEcho : Boolean;
- ahigp_MaxCPU : Fixed;
- ahigp_ClipMasterVolume : Boolean;
- end;
- { Debug levels }
- const
- AHI_DEBUG_NONE = 0;
- AHI_DEBUG_LOW = 1;
- AHI_DEBUG_HIGH = 2;
- AHI_DEBUG_ALL = 3;
- { AHIRequest }
- type
- PAHIRequest = ^tAHIRequest;
- tAHIRequest = record
- ahir_Std : tIOStdReq; { Standard IO request }
- ahir_Version : Word; { Needed version }
- { --- New for V4, they will be ignored by V2 and earlier --- }
- ahir_Pad1 : Word;
- ahir_Private : array[0..1] of Cardinal; { Hands off! }
- ahir_Type : Cardinal; { Sample format }
- ahir_Frequency : Cardinal; { Sample/Record frequency }
- ahir_Volume : Fixed; { Sample volume }
- ahir_Position : Fixed; { Stereo position }
- ahir_Link : PAHIRequest; { For double buffering }
- end;
- { Flags for OpenDevice() }
- const
- AHIDF_NOMODESCAN = 1 shl 0;
- AHIDB_NOMODESCAN = 0;
- function AHI_AllocAudioA(tagList : pTagItem location 'a1') : pAHIAudioCtrl;
- SysCall AHIBase 042;
- procedure AHI_FreeAudio(AudioCtrl : pAHIAudioCtrl location 'a2');
- SysCall AHIBase 048;
- procedure AHI_KillAudio;
- SysCall AHIBase 054;
- function AHI_ControlAudioA(AudioCtrl : pAHIAudioCtrl location 'a2'; tagList : pTagItem location 'a1') : Cardinal;
- SysCall AHIBase 060;
- procedure AHI_SetVol(Channel : Word location 'd0'; Volume : LongInt location 'd1'; Pan : LongInt location 'd2'; AudioCtrl : pAHIAudioCtrl location 'a2'; Flags : Cardinal location 'd3');
- SysCall AHIBase 066;
- procedure AHI_SetFreq(Channel : Word location 'd0'; Freq : Cardinal location 'd1'; AudioCtrl : pAHIAudioCtrl location 'a2'; Flags : Cardinal location 'd2');
- SysCall AHIBase 072;
- procedure AHI_SetSound(Channel : Word location 'd0'; Sound : Word location 'd1'; Offset : Cardinal location 'd2'; Length : LongInt location 'd3'; AudioCtrl : pAHIAudioCtrl location 'a2'; Flags : Cardinal location 'd4');
- SysCall AHIBase 078;
- function AHI_SetEffect(Effect : Pointer location 'a0'; AudioCtrl : pAHIAudioCtrl location 'a2') : Cardinal;
- SysCall AHIBase 084;
- function AHI_LoadSound(Sound : Word location 'd0'; SType : Cardinal location 'd1'; Info : Pointer location 'a0'; AudioCtrl : pAHIAudioCtrl location 'a2') : Cardinal;
- SysCall AHIBase 090;
- procedure AHI_UnloadSound(Sound : Word location 'd0'; Audioctrl : pAHIAudioCtrl location 'a2');
- SysCall AHIBase 096;
- function AHI_NextAudioID(Last_ID : Cardinal location 'd0') : Cardinal;
- SysCall AHIBase 102;
- function AHI_GetAudioAttrsA(ID : Cardinal location 'd0'; Audioctrl : pAHIAudioCtrl location 'a2'; tagList : pTagItem location 'a1') : BOOLEAN;
- SysCall AHIBase 108;
- function AHI_BestAudioIDA(tagList : pTagItem location 'a1') : Cardinal;
- SysCall AHIBase 114;
- function AHI_AllocAudioRequestA(tagList : pTagItem location 'a0') : pAHIAudioModeRequester;
- SysCall AHIBase 120;
- function AHI_AudioRequestA(Requester : pAHIAudioModeRequester location 'a0'; tagList : pTagItem location 'a1') : BOOLEAN;
- SysCall AHIBase 126;
- procedure AHI_FreeAudioRequest(Requester : pAHIAudioModeRequester location 'a0');
- SysCall AHIBase 132;
- procedure AHI_PlayA(Audioctrl : pAHIAudioCtrl location 'a2'; tagList : pTagItem location 'a1');
- SysCall AHIBase 138;
- function AHI_SampleFrameSize(SampleType : Cardinal location 'd0') : Cardinal;
- SysCall AHIBase 144;
- function AHI_AddAudioMode(a0arg : pTagItem location 'a0') : Cardinal;
- SysCall AHIBase 150;
- function AHI_RemoveAudioMode(d0arg : Cardinal location 'd0') : Cardinal;
- SysCall AHIBase 156;
- function AHI_LoadModeFile(a0arg : PChar location 'a0') : Cardinal;
- SysCall AHIBase 162;
- {
- Functions and procedures with tags
- }
- function AHI_AllocAudio(tagList : array of DWord): pAHIAudioCtrl;
- function AHI_ControlAudio(AudioCtrl : pAHIAudioCtrl; tagList : array Of DWord) : Cardinal;
- function AHI_GetAudioAttrs(ID : CARDINAL; Audioctrl : pAHIAudioCtrl; taglist : array of DWord) : Boolean;
- function AHI_BestAudioID(taglist : array of DWord) : Cardinal;
- function AHI_AllocAudioRequest(taglist : array of DWord) : pAHIAudioModeRequester;
- function AHI_AudioRequest(Requester : pAHIAudioModeRequester; taglist : array of DWord) : Boolean;
- procedure AHI_Play(Audioctrl : pAHIAudioCtrl; taglist : array of DWord);
- function InitAHILibrary : boolean;
- implementation
- function AHI_AllocAudio(tagList : array of DWord): pAHIAudioCtrl;
- begin
- AHI_AllocAudio:=AHI_AllocAudioA(@taglist);
- end;
- function AHI_AllocAudioRequest(taglist : array of DWord) : pAHIAudioModeRequester;
- begin
- AHI_AllocAudioRequest:=AHI_AllocAudioRequestA(@taglist);
- end;
- function AHI_AudioRequest(Requester : pAHIAudioModeRequester; taglist : array of DWord) : Boolean;
- begin
- AHI_AudioRequest:=AHI_AudioRequestA(Requester,@taglist);
- end;
- function AHI_BestAudioID(taglist : array of DWord) : longword;
- begin
- AHI_BestAudioID:=AHI_BestAudioIDA(@taglist);
- end;
- function AHI_ControlAudio(AudioCtrl : pAHIAudioCtrl; taglist : array of DWord) : longword;
- begin
- AHI_ControlAudio:=AHI_ControlAudioA(AudioCtrl,@taglist);
- end;
- function AHI_GetAudioAttrs(ID : longword; Audioctrl : pAHIAudioCtrl; taglist : array of DWord) : Boolean;
- begin
- AHI_GetAudioAttrs:=AHI_GetAudioAttrsA(ID,Audioctrl,@taglist);
- end;
- procedure AHI_Play(Audioctrl : pAHIAudioCtrl; taglist : array of DWord);
- begin
- AHI_PlayA(Audioctrl,@taglist);
- end;
- const
- { Change VERSION and LIBVERSION to proper values }
- VERSION : string[2] = '0';
- LIBVERSION : longword = 0;
- var
- ahi_exit : Pointer;
- procedure CloseAHILibrary;
- begin
- ExitProc := ahi_exit;
- if AHIBase <> nil then begin
- CloseLibrary(PLibrary(AHIBase));
- AHIBase := nil;
- end;
- end;
- function InitAHILibrary : boolean;
- begin
- AHIBase := nil;
- AHIBase := OpenLibrary(AHINAME,LIBVERSION);
- if AHIBase <> nil then begin
- ahi_exit := ExitProc;
- ExitProc := @CloseAhiLibrary;
- InitAhiLibrary:=True;
- end else begin
- InitAhiLibrary:=False;
- end;
- end;
- end. (* UNIT AHI *)
|