123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468 |
- {
- 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_sub.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.
- 15 Jan 2003.
- Changed cardinal > longword.
- Added startcode for unit.
- 12 Feb 2003.
- [email protected] Nils Sjoholm
- }
- {$I useamigasmartlink.inc}
- {$ifdef use_amiga_smartlink}
- {$smartlink on}
- {$endif use_amiga_smartlink}
- UNIT AHI_SUB;
- INTERFACE
- USES Exec, ahi, utility;
- {
- $VER: ahi_sub.h 4.1 (2.4.97)
- ahi/[driver].audio definitions
- (C) Copyright 1994-1997 Martin Blom
- All Rights Reserved.
- (TAB SIZE: 8)
- }
- { AHIAudioCtrlDrv }
- type
- PAHIAudioCtrlDrv = ^tAHIAudioCtrlDrv;
- tAHIAudioCtrlDrv = record
- ahiac_AudioCtrl : tAHIAudioCtrl;
- ahiac_Flags : ULONG; { See below for definition }
- ahiac_SoundFunc : PHook; { AHIA_SoundFunc }
- ahiac_PlayerFunc : PHook; { AHIA_PlayerFunc }
- ahiac_PlayerFreq : Fixed; { AHIA_PlayerFreq }
- ahiac_MinPlayerFreq : Fixed; { AHIA_MinPlayerFreq }
- ahiac_MaxPlayerFreq : Fixed; { AHIA_MaxPlayerFreq }
- ahiac_MixFreq : ULONG; { AHIA_MixFreq }
- ahiac_Channels : UWORD; { AHIA_Channels }
- ahiac_Sounds : UWORD; { AHIA_Sounds }
- ahiac_DriverData : APTR; { Unused. Store whatever you want here. }
- ahiac_MixerFunc : PHook; { Mixing routine Hook }
- ahiac_SamplerFunc : PHook; { Sampler routine Hook }
- ahiac_Obsolete : ULONG;
- ahiac_BuffSamples : ULONG; { Samples to mix this pass. }
- ahiac_MinBuffSamples : ULONG; { Min. samples to mix each pass. }
- ahiac_MaxBuffSamples : ULONG; { Max. samples to mix each pass. }
- ahiac_BuffSize : ULONG; { Buffer size ahiac_MixerFunc needs. }
- ahiac_BuffType : ULONG; { Buffer format (V2) }
- ahiac_PreTimer : function :BOOL; { Call before mixing (V4) }
- ahiac_PostTimer : procedure; { Call after mixing (V4) }
- end;
- { The rest is PRIVATE! Hands off! They may change any time.
- [lots of private stuff] }
- { TAGS }
- const
- AHIDB_UserBase = AHI_TagBase + 500; { Use for driver specific tags }
- { DEFS }
- { AHIsub_AllocAudio return flags }
- AHISF_ERROR = 1 shl 0;
- AHISF_MIXING = 1 shl 1;
- AHISF_TIMING = 1 shl 2;
- AHISF_KNOWSTEREO = 1 shl 3;
- AHISF_KNOWHIFI = 1 shl 4;
- AHISF_CANRECORD = 1 shl 5;
- AHISF_CANPOSTPROCESS = 1 shl 6;
- AHISB_ERROR = 0;
- AHISB_MIXING = 1;
- AHISB_TIMING = 2;
- AHISB_KNOWSTEREO = 3;
- AHISB_KNOWHIFI = 4;
- AHISB_CANRECORD = 5;
- AHISB_CANPOSTPROCESS = 6;
- { AHIsub_Start() and AHIsub_Stop() flags }
- AHISF_PLAY = 1 shl 0;
- AHISF_RECORD = 1 shl 1;
- AHISB_PLAY = 0;
- AHISB_RECORD = 1;
- { ahiac_Flags }
- AHIACF_VOL = 1 shl 0;
- AHIACF_PAN = 1 shl 1;
- AHIACF_STEREO = 1 shl 2;
- AHIACF_HIFI = 1 shl 3;
- AHIACF_PINGPONG = 1 shl 4;
- AHIACF_RECORD = 1 shl 5;
- AHIACF_MULTTAB = 1 shl 6; { Private! }
- AHIACB_VOL = 0;
- AHIACB_PAN = 1;
- AHIACB_STEREO = 2;
- AHIACB_HIFI = 3;
- AHIACB_PINGPONG = 4;
- AHIACB_RECORD = 5;
- AHIACB_MULTTAB = 6; { Private! }
- { AHIsub_Set#? and AHIsub_(Un)LoadSound return code }
- AHIS_UNKNOWN = not (0);
- { IFF chunk names for the audio mode file }
- ID_AHIM = $4148494D; { AHI Modes }
- ID_AUDN = $4155544E; { AUDio driver Name }
- ID_AUDD = $41554444; { AUDio driver Data }
- ID_AUDM = $4155444D; { AUDio Mode }
- VAR AHIsubBase : pLibrary;
- const
- AHI_SUBNAME : PChar = 'ahi_sub.library';
- FUNCTION AHIsub_AllocAudio(tagList : pTagItem; AudioCtrl : pAHIAudioCtrlDrv) : longword;
- PROCEDURE AHIsub_Disable(AudioCtrl : pAHIAudioCtrlDrv);
- PROCEDURE AHIsub_Enable(AudioCtrl : pAHIAudioCtrlDrv);
- PROCEDURE AHIsub_FreeAudio(AudioCtrl : pAHIAudioCtrlDrv);
- FUNCTION AHIsub_GetAttr(Attribute : longword; Argument : LONGINT; d2arg : LONGINT; tagList : pTagItem; AudioCtrl : pAHIAudioCtrlDrv) : LONGINT;
- FUNCTION AHIsub_HardwareControl(Attribute : longword; Argument : LONGINT; AudioCtrl : pAHIAudioCtrlDrv) : LONGINT;
- FUNCTION AHIsub_LoadSound(Sound : WORD; _Type : longword; Info : POINTER; AudioCtrl : pAHIAudioCtrlDrv) : longword;
- FUNCTION AHIsub_SetEffect(Effect : POINTER; AudioCtrl : pAHIAudioCtrlDrv) : longword;
- FUNCTION AHIsub_SetFreq(Channel : WORD; Freq : longword; AudioCtrl : pAHIAudioCtrlDrv; Flags : longword) : longword;
- FUNCTION AHIsub_SetSound(Channel : WORD; Sound : WORD; Offset : longword; Length : LONGINT; AudioCtrl : pAHIAudioCtrlDrv; Flags : longword) : longword;
- FUNCTION AHIsub_SetVol(Channel : WORD; Volume : LONGINT; Pan : LONGINT; AudioCtrl : pAHIAudioCtrlDrv; Flags : longword) : longword;
- FUNCTION AHIsub_Start(Flags : longword; AudioCtrl : pAHIAudioCtrlDrv) : longword;
- FUNCTION AHIsub_Stop(Flags : longword; AudioCtrl : pAHIAudioCtrlDrv) : longword;
- FUNCTION AHIsub_UnloadSound(Sound : WORD; Audioctrl : pAHIAudioCtrlDrv) : longword;
- FUNCTION AHIsub_Update(Flags : longword; AudioCtrl : pAHIAudioCtrlDrv) : longword;
- {You can remove this include and use a define instead}
- {$I useautoopenlib.inc}
- {$ifdef use_init_openlib}
- procedure InitAHI_SUBLibrary;
- {$endif use_init_openlib}
- {This is a variable that knows how the unit is compiled}
- var
- AHI_SUBIsCompiledHow : longint;
- IMPLEMENTATION
- uses
- {$ifndef dont_use_openlib}
- msgbox,
- {$endif dont_use_openlib}
- tagsarray;
- FUNCTION AHIsub_AllocAudio(tagList : pTagItem; AudioCtrl : pAHIAudioCtrlDrv) : longword;
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVEA.L tagList,A1
- MOVEA.L AudioCtrl,A2
- MOVEA.L AHIsubBase,A6
- JSR -030(A6)
- MOVEA.L (A7)+,A6
- MOVE.L D0,@RESULT
- END;
- END;
- PROCEDURE AHIsub_Disable(AudioCtrl : pAHIAudioCtrlDrv);
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVEA.L AudioCtrl,A2
- MOVEA.L AHIsubBase,A6
- JSR -042(A6)
- MOVEA.L (A7)+,A6
- END;
- END;
- PROCEDURE AHIsub_Enable(AudioCtrl : pAHIAudioCtrlDrv);
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVEA.L AudioCtrl,A2
- MOVEA.L AHIsubBase,A6
- JSR -048(A6)
- MOVEA.L (A7)+,A6
- END;
- END;
- PROCEDURE AHIsub_FreeAudio(AudioCtrl : pAHIAudioCtrlDrv);
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVEA.L AudioCtrl,A2
- MOVEA.L AHIsubBase,A6
- JSR -036(A6)
- MOVEA.L (A7)+,A6
- END;
- END;
- FUNCTION AHIsub_GetAttr(Attribute : longword; Argument : LONGINT; d2arg : LONGINT; tagList : pTagItem; AudioCtrl : pAHIAudioCtrlDrv) : LONGINT;
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVE.L Attribute,D0
- MOVE.L Argument,D1
- MOVE.L d2arg,D2
- MOVEA.L tagList,A1
- MOVEA.L AudioCtrl,A2
- MOVEA.L AHIsubBase,A6
- JSR -108(A6)
- MOVEA.L (A7)+,A6
- MOVE.L D0,@RESULT
- END;
- END;
- FUNCTION AHIsub_HardwareControl(Attribute : longword; Argument : LONGINT; AudioCtrl : pAHIAudioCtrlDrv) : LONGINT;
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVE.L Attribute,D0
- MOVE.L Argument,D1
- MOVEA.L AudioCtrl,A2
- MOVEA.L AHIsubBase,A6
- JSR -114(A6)
- MOVEA.L (A7)+,A6
- MOVE.L D0,@RESULT
- END;
- END;
- FUNCTION AHIsub_LoadSound(Sound : WORD; _Type : longword; Info : POINTER; AudioCtrl : pAHIAudioCtrlDrv) : 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 AHIsubBase,A6
- JSR -096(A6)
- MOVEA.L (A7)+,A6
- MOVE.L D0,@RESULT
- END;
- END;
- FUNCTION AHIsub_SetEffect(Effect : POINTER; AudioCtrl : pAHIAudioCtrlDrv) : longword;
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVEA.L Effect,A0
- MOVEA.L AudioCtrl,A2
- MOVEA.L AHIsubBase,A6
- JSR -090(A6)
- MOVEA.L (A7)+,A6
- MOVE.L D0,@RESULT
- END;
- END;
- FUNCTION AHIsub_SetFreq(Channel : WORD; Freq : longword; AudioCtrl : pAHIAudioCtrlDrv; Flags : longword) : 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 AHIsubBase,A6
- JSR -078(A6)
- MOVEA.L (A7)+,A6
- MOVE.L D0,@RESULT
- END;
- END;
- FUNCTION AHIsub_SetSound(Channel : WORD; Sound : WORD; Offset : longword; Length : LONGINT; AudioCtrl : pAHIAudioCtrlDrv; Flags : longword) : longword;
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVE.L Channel,D0
- MOVE.L Sound,D1
- MOVE.L Offset,D2
- MOVE.L Length,D3
- MOVEA.L AudioCtrl,A2
- MOVE.L Flags,D4
- MOVEA.L AHIsubBase,A6
- JSR -084(A6)
- MOVEA.L (A7)+,A6
- MOVE.L D0,@RESULT
- END;
- END;
- FUNCTION AHIsub_SetVol(Channel : WORD; Volume : LONGINT; Pan : LONGINT; AudioCtrl : pAHIAudioCtrlDrv; Flags : longword) : 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 AHIsubBase,A6
- JSR -072(A6)
- MOVEA.L (A7)+,A6
- MOVE.L D0,@RESULT
- END;
- END;
- FUNCTION AHIsub_Start(Flags : longword; AudioCtrl : pAHIAudioCtrlDrv) : longword;
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVE.L Flags,D0
- MOVEA.L AudioCtrl,A2
- MOVEA.L AHIsubBase,A6
- JSR -054(A6)
- MOVEA.L (A7)+,A6
- MOVE.L D0,@RESULT
- END;
- END;
- FUNCTION AHIsub_Stop(Flags : longword; AudioCtrl : pAHIAudioCtrlDrv) : longword;
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVE.L Flags,D0
- MOVEA.L AudioCtrl,A2
- MOVEA.L AHIsubBase,A6
- JSR -066(A6)
- MOVEA.L (A7)+,A6
- MOVE.L D0,@RESULT
- END;
- END;
- FUNCTION AHIsub_UnloadSound(Sound : WORD; Audioctrl : pAHIAudioCtrlDrv) : longword;
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVE.L Sound,D0
- MOVEA.L Audioctrl,A2
- MOVEA.L AHIsubBase,A6
- JSR -102(A6)
- MOVEA.L (A7)+,A6
- MOVE.L D0,@RESULT
- END;
- END;
- FUNCTION AHIsub_Update(Flags : longword; AudioCtrl : pAHIAudioCtrlDrv) : longword;
- BEGIN
- ASM
- MOVE.L A6,-(A7)
- MOVE.L Flags,D0
- MOVEA.L AudioCtrl,A2
- MOVEA.L AHIsubBase,A6
- JSR -060(A6)
- MOVEA.L (A7)+,A6
- MOVE.L D0,@RESULT
- END;
- 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_sub.library}
- {$Info don't forget to use InitAHI_SUBLibrary in the beginning of your program}
- var
- ahi_sub_exit : Pointer;
- procedure Closeahi_subLibrary;
- begin
- ExitProc := ahi_sub_exit;
- if AHIsubBase <> nil then begin
- CloseLibrary(AHIsubBase);
- AHIsubBase := nil;
- end;
- end;
- procedure InitAHI_SUBLibrary;
- begin
- AHIsubBase := nil;
- AHIsubBase := OpenLibrary(AHI_SUBNAME,LIBVERSION);
- if AHIsubBase <> nil then begin
- ahi_sub_exit := ExitProc;
- ExitProc := @Closeahi_subLibrary;
- end else begin
- MessageBox('FPC Pascal Error',
- 'Can''t open ahi_sub.library version ' + VERSION + #10 +
- 'Deallocating resources and closing down',
- 'Oops');
- halt(20);
- end;
- end;
- begin
- AHI_SUBIsCompiledHow := 2;
- {$endif use_init_openlib}
- {$ifdef use_auto_openlib}
- {$Info Compiling autoopening of ahi_sub.library}
- var
- ahi_sub_exit : Pointer;
- procedure Closeahi_subLibrary;
- begin
- ExitProc := ahi_sub_exit;
- if AHIsubBase <> nil then begin
- CloseLibrary(AHIsubBase);
- AHIsubBase := nil;
- end;
- end;
- begin
- AHIsubBase := nil;
- AHIsubBase := OpenLibrary(AHI_SUBNAME,LIBVERSION);
- if AHIsubBase <> nil then begin
- ahi_sub_exit := ExitProc;
- ExitProc := @Closeahi_subLibrary;
- AHI_SUBIsCompiledHow := 1;
- end else begin
- MessageBox('FPC Pascal Error',
- 'Can''t open ahi_sub.library version ' + VERSION + #10 +
- 'Deallocating resources and closing down',
- 'Oops');
- halt(20);
- end;
- {$endif use_auto_openlib}
- {$ifdef dont_use_openlib}
- begin
- AHI_SUBIsCompiledHow := 3;
- {$Warning No autoopening of ahi_sub.library compiled}
- {$Warning Make sure you open ahi_sub.library yourself}
- {$endif dont_use_openlib}
- END. (* UNIT AHI_SUB *)
|