123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948 |
- {
- This file is part of the Free Pascal run time library.
- A file in Amiga system run time library.
- Copyright (c) 2003 by Nils Sjöholm.
- member of the Amiga RTL development team.
- This is a unit for ahi.library
- 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.
- **********************************************************************}
- {
- History:
- First version of this unit.
- 14 Jan 2003.
- Changed cardinal > longword.
- Added startcode for unit.
- 12 Feb 2003.
- [email protected] Nils Sjoholm
- }
- {$mode objfpc}
- {$I useamigasmartlink.inc}
- {$ifdef use_amiga_smartlink}
- {$smartlink on}
- {$endif use_amiga_smartlink}
- UNIT AHI;
- INTERFACE
- USES Exec,utility;
- VAR AHIBase : pLibrary;
- {
- $VER: ahi.h 4.2 (27.4.97)
- ahi.device definitions
- (C) Copyright 1994-1997 Martin Blom
- All Rights Reserved.
- (TAB SIZE: 8)
- }
- 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 : APTR;
- end;
- { AHISoundMessage }
- PAHISoundMessage = ^tAHISoundMessage;
- tAHISoundMessage = record
- ahism_Channel : UWORD;
- end;
- { AHIRecordMessage }
- PAHIRecordMessage = ^tAHIRecordMessage;
- tAHIRecordMessage = record
- ahirm_Type : ULONG; { Format of buffer (object) }
- ahirm_Buffer : APTR; { Pointer to the sample array }
- ahirm_Length : ULONG; { Number of sample frames in buffer }
- end;
- { AHISampleInfo }
- PAHISampleInfo = ^tAHISampleInfo;
- tAHISampleInfo = record
- ahisi_Type : ULONG; { Format of samples }
- ahisi_Address : APTR; { Address to array of samples }
- ahisi_Length : ULONG; { Number of samples in array }
- end;
- { AHIAudioModeRequester }
- PAHIAudioModeRequester = ^tAHIAudioModeRequester;
- tAHIAudioModeRequester = record
- ahiam_AudioID : ULONG; { Selected audio mode }
- ahiam_MixFreq : ULONG; { Selected mixing/sampling frequency }
- ahiam_LeftEdge : WORD; { Coordinates of requester on exit }
- ahiam_TopEdge : WORD;
- ahiam_Width : WORD;
- ahiam_Height : WORD;
- ahiam_InfoOpened : BOOL; { Info window opened on exit? }
- ahiam_InfoLeftEdge : WORD; { Last coordinates of Info window }
- ahiam_InfoTopEdge : WORD;
- ahiam_InfoWidth : WORD;
- ahiam_InfoHeight : WORD;
- ahiam_UserData : APTR; { You can store your own data here }
- { Lots of private data follows! }
- end;
- { AHIEffMasterVolume }
- PAHIEffMasterVolume = ^tAHIEffMasterVolume;
- tAHIEffMasterVolume = record
- ahie_Effect : ULONG; { Set to AHIET_MASTERVOLUME }
- ahiemv_Volume : Fixed; { See autodocs for range! }
- end;
- { AHIEffOutputBuffer }
- PAHIEffOutputBuffer = ^tAHIEffOutputBuffer;
- tAHIEffOutputBuffer = record
- ahie_Effect : ULONG; { Set to AHIET_OUTPUTBUFFER }
- ahieob_Func : PHook;
- { These fields are filled by AHI }
- ahieob_Type : ULONG; { Format of buffer }
- ahieob_Buffer : APTR; { Pointer to the sample array }
- ahieob_Length : ULONG; { Number of sample frames in buffer }
- end;
- { AHIEffDSPMask (V4) }
- PAHIEffDSPMask = ^tAHIEffDSPMask;
- tAHIEffDSPMask = record
- ahie_Effect : ULONG; { Set to AHIET_DSPMASK }
- ahiedm_Channels : UWORD; { Number of elements in array }
- ahiedm_Mask : array[0..0] of UBYTE; { Here follows the array }
- end;
- const
- AHIEDM_WET = 0;
- AHIEDM_DRY = 1;
- { AHIEffDSPEcho (V4) }
- type
- PAHIDSPEcho = ^tAHIDSPEcho;
- tAHIDSPEcho = record
- ahie_Effect : ULONG; { Set to AHIET_DSPECHO }
- ahiede_Delay : ULONG; { In samples }
- ahiede_Feedback : Fixed;
- ahiede_Mix : Fixed;
- ahiede_Cross : Fixed;
- end;
- { AHIEffChannelInfo (V4) }
- PAHIEffChannelInfo = ^tAHIEffChannelInfo;
- tAHIEffChannelInfo = record
- ahie_Effect : ULONG; { Set to AHIET_CHANNELINFO }
- ahieci_Func : PHook;
- ahieci_Channels : UWORD;
- ahieci_Pad : UWORD;
- { The rest is filled by AHI }
- ahieci_Offset : array[0..0] of ULONG; { 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 }
- { Boolean }
- AHIC_Play = AHI_TagBase + 80;
- { Boolean }
- 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 ULONG }
- 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 ULONG }
- AHIC_Input_Query = AHI_TagBase + 90;
- AHIC_Output = AHI_TagBase + 91;
- { ti_Data is pointer to ULONG }
- 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;
- { Boolean }
- AHIDB_Volume = AHI_TagBase + 103;
- { Boolean }
- AHIDB_Panning = AHI_TagBase + 104;
- { Boolean }
- AHIDB_Stereo = AHI_TagBase + 105;
- { Boolean }
- AHIDB_HiFi = AHI_TagBase + 106;
- { Boolean }
- 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;
- { Boolean }
- 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;
- { Boolean }
- AHIDB_Realtime = AHI_TagBase + 125;
- { It's sample frames }
- AHIDB_MaxPlaySamples = AHI_TagBase + 126;
- { It's sample frames }
- AHIDB_MaxRecordSamples = AHI_TagBase + 127;
- { Boolean }
- 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 : UBYTE;
- ahiup_Pad : UBYTE;
- ahiup_Channels : UWORD;
- ahiup_AudioMode : ULONG;
- ahiup_Frequency : ULONG;
- ahiup_MonitorVolume : Fixed;
- ahiup_InputGain : Fixed;
- ahiup_OutputVolume : Fixed;
- ahiup_Input : ULONG;
- ahiup_Output : ULONG;
- end;
- PAHIGlobalPrefs = ^tAHIGlobalPrefs;
- tAHIGlobalPrefs = record
- ahigp_DebugLevel : UWORD; { Range: 0-3 (for None, Low,}
- ahigp_DisableSurround : BOOL; { High and All) }
- ahigp_DisableEcho : BOOL;
- ahigp_FastEcho : BOOL;
- ahigp_MaxCPU : Fixed;
- ahigp_ClipMasterVolume : BOOL;
- 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 : UWORD; { Needed version }
- { --- New for V4, they will be ignored by V2 and earlier --- }
- ahir_Pad1 : UWORD;
- ahir_Private : array[0..1] of ULONG; { Hands off! }
- ahir_Type : ULONG; { Sample format }
- ahir_Frequency : ULONG; { 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_AddAudioMode(a0arg : pTagItem) : longword;
- FUNCTION AHI_AllocAudioA(tagList : pTagItem) : pAHIAudioCtrl;
- FUNCTION AHI_AllocAudioRequestA(tagList : pTagItem) : pAHIAudioModeRequester;
- FUNCTION AHI_AudioRequestA(Requester : pAHIAudioModeRequester; tagList : pTagItem) : BOOLEAN;
- FUNCTION AHI_BestAudioIDA(tagList : pTagItem) : longword;
- FUNCTION AHI_ControlAudioA(AudioCtrl : pAHIAudioCtrl; tagList : pTagItem) : longword;
- PROCEDURE AHI_FreeAudio(AudioCtrl : pAHIAudioCtrl);
- PROCEDURE AHI_FreeAudioRequest(Requester : pAHIAudioModeRequester);
- FUNCTION AHI_GetAudioAttrsA(ID : longword; Audioctrl : pAHIAudioCtrl; tagList : pTagItem) : BOOLEAN;
- PROCEDURE AHI_KillAudio;
- FUNCTION AHI_LoadModeFile(a0arg : pCHAR) : longword;
- FUNCTION AHI_LoadSound(Sound : WORD; _Type : longword; Info : POINTER; AudioCtrl : pAHIAudioCtrl) : longword;
- FUNCTION AHI_NextAudioID(Last_ID : longword) : longword;
- PROCEDURE AHI_PlayA(Audioctrl : pAHIAudioCtrl; tagList : pTagItem);
- FUNCTION AHI_RemoveAudioMode(d0arg : longword) : longword;
- FUNCTION AHI_SampleFrameSize(SampleType : longword) : longword;
- FUNCTION AHI_SetEffect(Effect : POINTER; AudioCtrl : pAHIAudioCtrl) : longword;
- PROCEDURE AHI_SetFreq(Channel : WORD; Freq : longword; AudioCtrl : pAHIAudioCtrl; Flags : longword);
- PROCEDURE AHI_SetSound(Channel : WORD; Sound : WORD; Offset : longword; len : LONGINT; AudioCtrl : pAHIAudioCtrl; Flags : longword);
- PROCEDURE AHI_SetVol(Channel : WORD; Volume : LONGINT; Pan : LONGINT; AudioCtrl : pAHIAudioCtrl; Flags : longword);
- PROCEDURE AHI_UnloadSound(Sound : WORD; Audioctrl : pAHIAudioCtrl);
- {
- Functions and procedures with array of const go here
- }
- FUNCTION AHI_AllocAudio(const tagList : Array Of Const) : pAHIAudioCtrl;
- FUNCTION AHI_AllocAudioRequest(const tagList : Array Of Const) : pAHIAudioModeRequester;
- FUNCTION AHI_AudioRequest(Requester : pAHIAudioModeRequester; const tagList : Array Of Const) : BOOLEAN;
- FUNCTION AHI_BestAudioID(const tagList : Array Of Const) : longword;
- FUNCTION AHI_ControlAudio(AudioCtrl : pAHIAudioCtrl; const tagList : Array Of Const) : longword;
- FUNCTION AHI_GetAudioAttrs(ID : longword; Audioctrl : pAHIAudioCtrl; const tagList : Array Of Const) : BOOLEAN;
- PROCEDURE AHI_Play(Audioctrl : pAHIAudioCtrl; const tagList : Array Of Const);
- {You can remove this include and use a define instead}
- {$I useautoopenlib.inc}
- {$ifdef use_init_openlib}
- procedure InitAHILibrary;
- {$endif use_init_openlib}
- {This is a variable that knows how the unit is compiled}
- var
- AHIIsCompiledHow : longint;
- IMPLEMENTATION
- uses
- {$ifndef dont_use_openlib}
- msgbox,
- {$endif dont_use_openlib}
- tagsarray;
- FUNCTION AHI_AddAudioMode(a0arg : pTagItem) : longword;
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVEA.L a0arg,A0
- MOVEA.L AHIBase,A6
- JSR -150(A6)
- MOVEA.L (A7)+,A6
- MOVE.L D0,@RESULT
- END;
- END;
- FUNCTION AHI_AllocAudioA(tagList : pTagItem) : pAHIAudioCtrl;
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVEA.L tagList,A1
- MOVEA.L AHIBase,A6
- JSR -042(A6)
- MOVEA.L (A7)+,A6
- MOVE.L D0,@RESULT
- END;
- END;
- FUNCTION AHI_AllocAudioRequestA(tagList : pTagItem) : pAHIAudioModeRequester;
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVEA.L tagList,A0
- MOVEA.L AHIBase,A6
- JSR -120(A6)
- MOVEA.L (A7)+,A6
- MOVE.L D0,@RESULT
- END;
- END;
- FUNCTION AHI_AudioRequestA(Requester : pAHIAudioModeRequester; tagList : pTagItem) : BOOLEAN;
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVEA.L Requester,A0
- MOVEA.L tagList,A1
- MOVEA.L AHIBase,A6
- JSR -126(A6)
- MOVEA.L (A7)+,A6
- TST.W D0
- BEQ.B @end
- MOVEQ #1,D0
- @end: MOVE.B D0,@RESULT
- END;
- END;
- FUNCTION AHI_BestAudioIDA(tagList : pTagItem) : longword;
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVEA.L tagList,A1
- MOVEA.L AHIBase,A6
- JSR -114(A6)
- MOVEA.L (A7)+,A6
- MOVE.L D0,@RESULT
- END;
- END;
- FUNCTION AHI_ControlAudioA(AudioCtrl : pAHIAudioCtrl; tagList : pTagItem) : longword;
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVEA.L AudioCtrl,A2
- MOVEA.L tagList,A1
- MOVEA.L AHIBase,A6
- JSR -060(A6)
- MOVEA.L (A7)+,A6
- MOVE.L D0,@RESULT
- END;
- END;
- PROCEDURE AHI_FreeAudio(AudioCtrl : pAHIAudioCtrl);
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVEA.L AudioCtrl,A2
- MOVEA.L AHIBase,A6
- JSR -048(A6)
- MOVEA.L (A7)+,A6
- END;
- END;
- PROCEDURE AHI_FreeAudioRequest(Requester : pAHIAudioModeRequester);
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVEA.L Requester,A0
- MOVEA.L AHIBase,A6
- JSR -132(A6)
- MOVEA.L (A7)+,A6
- END;
- END;
- FUNCTION AHI_GetAudioAttrsA(ID : longword; Audioctrl : pAHIAudioCtrl; tagList : pTagItem) : BOOLEAN;
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVE.L ID,D0
- MOVEA.L Audioctrl,A2
- MOVEA.L tagList,A1
- MOVEA.L AHIBase,A6
- JSR -108(A6)
- MOVEA.L (A7)+,A6
- TST.W D0
- BEQ.B @end
- MOVEQ #1,D0
- @end: MOVE.B D0,@RESULT
- END;
- END;
- PROCEDURE AHI_KillAudio;
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVEA.L AHIBase,A6
- JSR -054(A6)
- MOVEA.L (A7)+,A6
- END;
- END;
- FUNCTION AHI_LoadModeFile(a0arg : pCHAR) : longword;
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVEA.L a0arg,A0
- MOVEA.L AHIBase,A6
- JSR -162(A6)
- MOVEA.L (A7)+,A6
- MOVE.L D0,@RESULT
- END;
- END;
- FUNCTION AHI_LoadSound(Sound : WORD; _Type : longword; Info : POINTER; AudioCtrl : pAHIAudioCtrl) : longword;
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVE.L Sound,D0
- MOVE.L _Type,D1
- MOVEA.L Info,A0
- MOVEA.L AudioCtrl,A2
- MOVEA.L AHIBase,A6
- JSR -090(A6)
- MOVEA.L (A7)+,A6
- MOVE.L D0,@RESULT
- END;
- END;
- FUNCTION AHI_NextAudioID(Last_ID : longword) : longword;
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVE.L Last_ID,D0
- MOVEA.L AHIBase,A6
- JSR -102(A6)
- MOVEA.L (A7)+,A6
- MOVE.L D0,@RESULT
- END;
- END;
- PROCEDURE AHI_PlayA(Audioctrl : pAHIAudioCtrl; tagList : pTagItem);
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVEA.L Audioctrl,A2
- MOVEA.L tagList,A1
- MOVEA.L AHIBase,A6
- JSR -138(A6)
- MOVEA.L (A7)+,A6
- END;
- END;
- FUNCTION AHI_RemoveAudioMode(d0arg : longword) : longword;
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVE.L d0arg,D0
- MOVEA.L AHIBase,A6
- JSR -156(A6)
- MOVEA.L (A7)+,A6
- MOVE.L D0,@RESULT
- END;
- END;
- FUNCTION AHI_SampleFrameSize(SampleType : longword) : longword;
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVE.L SampleType,D0
- MOVEA.L AHIBase,A6
- JSR -144(A6)
- MOVEA.L (A7)+,A6
- MOVE.L D0,@RESULT
- END;
- END;
- FUNCTION AHI_SetEffect(Effect : POINTER; AudioCtrl : pAHIAudioCtrl) : longword;
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVEA.L Effect,A0
- MOVEA.L AudioCtrl,A2
- MOVEA.L AHIBase,A6
- JSR -084(A6)
- MOVEA.L (A7)+,A6
- MOVE.L D0,@RESULT
- END;
- END;
- PROCEDURE AHI_SetFreq(Channel : WORD; Freq : longword; AudioCtrl : pAHIAudioCtrl; Flags : longword);
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVE.L Channel,D0
- MOVE.L Freq,D1
- MOVEA.L AudioCtrl,A2
- MOVE.L Flags,D2
- MOVEA.L AHIBase,A6
- JSR -072(A6)
- MOVEA.L (A7)+,A6
- END;
- END;
- PROCEDURE AHI_SetSound(Channel : WORD; Sound : WORD; Offset : longword; len : LONGINT; AudioCtrl : pAHIAudioCtrl; Flags : longword);
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVE.L Channel,D0
- MOVE.L Sound,D1
- MOVE.L Offset,D2
- MOVE.L len,D3
- MOVEA.L AudioCtrl,A2
- MOVE.L Flags,D4
- MOVEA.L AHIBase,A6
- JSR -078(A6)
- MOVEA.L (A7)+,A6
- END;
- END;
- PROCEDURE AHI_SetVol(Channel : WORD; Volume : LONGINT; Pan : LONGINT; AudioCtrl : pAHIAudioCtrl; Flags : longword);
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVE.L Channel,D0
- MOVE.L Volume,D1
- MOVE.L Pan,D2
- MOVEA.L AudioCtrl,A2
- MOVE.L Flags,D3
- MOVEA.L AHIBase,A6
- JSR -066(A6)
- MOVEA.L (A7)+,A6
- END;
- END;
- PROCEDURE AHI_UnloadSound(Sound : WORD; Audioctrl : pAHIAudioCtrl);
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVE.L Sound,D0
- MOVEA.L Audioctrl,A2
- MOVEA.L AHIBase,A6
- JSR -096(A6)
- MOVEA.L (A7)+,A6
- END;
- END;
- {
- Functions and procedures with array of const go here
- }
- FUNCTION AHI_AllocAudio(const tagList : Array Of Const) : pAHIAudioCtrl;
- begin
- AHI_AllocAudio := AHI_AllocAudioA(readintags(tagList));
- end;
- FUNCTION AHI_AllocAudioRequest(const tagList : Array Of Const) : pAHIAudioModeRequester;
- begin
- AHI_AllocAudioRequest := AHI_AllocAudioRequestA(readintags(tagList));
- end;
- FUNCTION AHI_AudioRequest(Requester : pAHIAudioModeRequester; const tagList : Array Of Const) : BOOLEAN;
- begin
- AHI_AudioRequest := AHI_AudioRequestA(Requester , readintags(tagList));
- end;
- FUNCTION AHI_BestAudioID(const tagList : Array Of Const) : longword;
- begin
- AHI_BestAudioID := AHI_BestAudioIDA(readintags(tagList));
- end;
- FUNCTION AHI_ControlAudio(AudioCtrl : pAHIAudioCtrl; const tagList : Array Of Const) : longword;
- begin
- AHI_ControlAudio := AHI_ControlAudioA(AudioCtrl , readintags(tagList));
- end;
- FUNCTION AHI_GetAudioAttrs(ID : longword; Audioctrl : pAHIAudioCtrl; const tagList : Array Of Const) : BOOLEAN;
- begin
- AHI_GetAudioAttrs := AHI_GetAudioAttrsA(ID , Audioctrl , readintags(tagList));
- end;
- PROCEDURE AHI_Play(Audioctrl : pAHIAudioCtrl; const tagList : Array Of Const);
- begin
- AHI_PlayA(Audioctrl , readintags(tagList));
- end;
- const
- { Change VERSION and LIBVERSION to proper values }
- VERSION : string[2] = '0';
- LIBVERSION : longword = 0;
- {$ifdef use_init_openlib}
- {$Info Compiling initopening of ahi.library}
- {$Info don't forget to use InitAHILibrary in the beginning of your program}
- var
- ahi_exit : Pointer;
- procedure CloseahiLibrary;
- begin
- ExitProc := ahi_exit;
- if AHIBase <> nil then begin
- CloseLibrary(AHIBase);
- AHIBase := nil;
- end;
- end;
- procedure InitAHILibrary;
- begin
- AHIBase := nil;
- AHIBase := OpenLibrary(AHINAME,LIBVERSION);
- if AHIBase <> nil then begin
- ahi_exit := ExitProc;
- ExitProc := @CloseahiLibrary;
- end else begin
- MessageBox('FPC Pascal Error',
- 'Can''t open ahi.library version ' + VERSION + #10 +
- 'Deallocating resources and closing down',
- 'Oops');
- halt(20);
- end;
- end;
- begin
- AHIIsCompiledHow := 2;
- {$endif use_init_openlib}
- {$ifdef use_auto_openlib}
- {$Info Compiling autoopening of ahi.library}
- var
- ahi_exit : Pointer;
- procedure CloseahiLibrary;
- begin
- ExitProc := ahi_exit;
- if AHIBase <> nil then begin
- CloseLibrary(AHIBase);
- AHIBase := nil;
- end;
- end;
- begin
- AHIBase := nil;
- AHIBase := OpenLibrary(AHINAME,LIBVERSION);
- if AHIBase <> nil then begin
- ahi_exit := ExitProc;
- ExitProc := @CloseahiLibrary;
- AHIIsCompiledHow := 1;
- end else begin
- MessageBox('FPC Pascal Error',
- 'Can''t open ahi.library version ' + VERSION + #10 +
- 'Deallocating resources and closing down',
- 'Oops');
- halt(20);
- end;
- {$endif use_auto_openlib}
- {$ifdef dont_use_openlib}
- begin
- AHIIsCompiledHow := 3;
- {$Warning No autoopening of ahi.library compiled}
- {$Warning Make sure you open ahi.library yourself}
- {$endif dont_use_openlib}
- END. (* UNIT AHI *)
|