123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083 |
- //############################################################################
- //## ##
- //## Miles Sound System ##
- //## ##
- //## MSS.H: Miles Sound System main header file ##
- //## ##
- //## Version 1.00 of 15-Feb-95: Initial, derived from AIL.H V3.02 ##
- //## 1.01 of 19-Jun-95: Added various functions for V3.03 release ##
- //## 1.02 of 22-Nov-95: C++ typedef problem fixed, declspecs added ##
- //## 1.03 of 15-Feb-96: Changes for 16 bit callbacks and multiple ##
- //## 16 bit DLL loads (JKR) ##
- //## 1.04 of 2-Nov-97: Changes made to handle DLS in future ##
- //## versions ##
- //## 1.05 of 1-Jan-98: Massive changes for version 4.0 ##
- //## 1.06 of 17-Sep-98: Massive changes for version 5.0 ##
- //## 1.07 of 2-Feb-99: Changes for new input API ##
- //## 1.08 of 8-Feb-99: Changes for new filter helper functions ##
- //## ##
- //## Author: John Miles ##
- //## ##
- //############################################################################
- //## ##
- //## Contact RAD Game Tools at 425-893-4300 for technical support. ##
- //## ##
- //############################################################################
- #ifndef MSS_VERSION
- #define MSS_VERSION "5.0q"
- #define MSS_VERSION_DATE "06-Aug-99"
- #define MSS_COPYRIGHT "Copyright (C) 1991-99 RAD Game Tools, Inc."
- #endif
- #ifndef MSS_H
- #define MSS_H
- // IS_DOS for DOS
- // IS_WINDOWS for Windows or Win32s
- // IS_WIN32 for Win32s
- // IS_WIN16 for Windows
- // IS_32 for 32-bit DOS or Win32s
- // IS_16 for 16-bit Windows
- #ifdef IS_DOS
- #undef IS_DOS
- #endif
- #ifdef IS_WINDOWS
- #undef IS_WINDOWS
- #endif
- #ifdef IS_WIN32
- #undef IS_WIN32
- #endif
- #ifdef IS_WIN16
- #undef IS_WIN16
- #endif
- #ifdef IS_32
- #undef IS_32
- #endif
- #ifdef IS_16
- #undef IS_16
- #endif
- #ifdef __DOS__
- #define IS_DOS
- #define IS_32
- #else
- #ifdef _WIN32
- #define IS_WINDOWS
- #define IS_WIN32
- #define IS_32
- #else
- #ifdef WIN32
- #define IS_WINDOWS
- #define IS_WIN32
- #define IS_32
- #else
- #ifdef __NT__
- #define IS_WINDOWS
- #define IS_WIN32
- #define IS_32
- #else
- #ifdef __WIN32__
- #define IS_WINDOWS
- #define IS_WIN32
- #define IS_32
- #else
- #ifdef _WINDOWS
- #define IS_WINDOWS
- #define IS_WIN16
- #define IS_16
- #else
- #ifdef _WINDLL
- #define IS_WINDOWS
- #define IS_WIN16
- #define IS_16
- #else
- #ifdef WINDOWS
- #define IS_WINDOWS
- #define IS_WIN16
- #define IS_16
- #else
- #ifdef __WINDOWS__
- #define IS_WINDOWS
- #define IS_WIN16
- #define IS_16
- #else
- #ifdef _Windows
- #define IS_WINDOWS
- #define IS_WIN16
- #define IS_16
- #endif
- #endif
- #endif
- #endif
- #endif
- #endif
- #endif
- #endif
- #endif
- #endif
- #if (!defined(IS_DOS) && !defined(IS_WINDOWS))
- #error MSS.H did not detect your platform. Define __DOS__, _WINDOWS, or WIN32.
- #endif
- #ifdef _PUSHPOP_SUPPORTED
- #pragma pack(push,1)
- #else
- #pragma pack(1)
- #endif
- #ifdef __cplusplus
- extern "C" {
- #endif
- #ifdef IS_DOS
- #define AILCALLBACK __pascal
- #define AILEXPORT cdecl
- #define DXDEC extern
- #define DXDEF
- #define AILCALL cdecl
- #define FAR
- #define HIWORD(ptr) (((U32)ptr)>>16)
- #define LOWORD(ptr) ((U16)((U32)ptr))
- #define FOURCC U32
- #define MAKEFOURCC(ch0, ch1, ch2, ch3) \
- ((U32)(U8)(ch0) | ((U32)(U8)(ch1) << 8) | \
- ((U32)(U8)(ch2) << 16) | ((U32)(U8)(ch3) << 24 ))
- #define mmioFOURCC(w,x,y,z) MAKEFOURCC(w,x,y,z)
- #define AILLIBCALLBACK __pascal
- #else
- #define AILLIBCALLBACK WINAPI
- #ifndef WIN32_LEAN_AND_MEAN
- #define WIN32_LEAN_AND_MEAN
- #endif
- #ifndef WIN32_EXTRA_LEAN
- #define WIN32_EXTRA_LEAN
- #endif
- #ifndef STRICT
- #define STRICT
- #endif
- #include <windows.h>
- #include <mmsystem.h>
- //
- // If compiling MSS DLL, use __declspec(dllexport) for both
- // declarations and definitions
- //
- // If compiling MSS16 library or application, use "extern" in declarations
- // and nothing in definitions
- //
- #ifdef IS_WIN32
- #define AILEXPORT WINAPI
- #ifdef BUILD_MSS
- #define DXDEC __declspec(dllexport)
- #define DXDEF __declspec(dllexport)
- #else
- #ifdef __BORLANDC__
- #define DXDEC extern
- #else
- #define DXDEC __declspec(dllimport)
- #endif
- #endif
- #define MSSDLLNAME "MSS32.DLL"
- #else
- #define AILEXPORT __export WINAPI
- #define DXDEC extern
- #define DXDEF
- #define MSSDLLNAME "MSS16.DLL"
- #endif
- #define AILCALL WINAPI
- #define AILCALLBACK AILEXPORT
- typedef LPVOID AILLPDIRECTSOUND;
- typedef LPVOID AILLPDIRECTSOUNDBUFFER;
- #endif
- #ifndef NULL
- #define NULL 0
- #endif
- //
- // Misc. constant definitions
- //
- #define MAX_DRVRS 16 // Max. # of simultaneous drivers
- #define MAX_TIMERS 16 // Max. # of simultaneous timers
- #define MAX_NOTES 32 // Max # of notes "on"
- #define FOR_NEST 4 // # of nested XMIDI FOR loops
- #define NUM_CHANS 16 // # of possible MIDI channels
- #define MAX_W_VOICES 16 // Max virtual wave synth voice cnt
- #define MAX_W_ENTRIES 512 // 512 wave library entries max.
- #define MIN_CHAN ( 1-1) // Min channel recognized (0-based)
- #define MAX_CHAN (16-1) // Max channel recognized
- #define MIN_LOCK_CHAN ( 2-1) // Min channel available for locking
- #define MAX_LOCK_CHAN ( 9-1) // Max channel available for locking
- #define PERCUSS_CHAN (10-1) // Percussion channel (no locking)
- #define AIL_MAX_FILE_HEADER_SIZE 4096 // AIL_set_named_sample_file() requires at least 4K
- // of data or the entire file image, whichever is less,
- // to determine sample format
- #define DIG_F_16BITS_MASK 1
- #define DIG_F_STEREO_MASK 2
- #define DIG_F_ADPCM_MASK 4
- #define DIG_F_MONO_8 0 // PCM data formats
- #define DIG_F_MONO_16 (DIG_F_16BITS_MASK)
- #define DIG_F_STEREO_8 (DIG_F_STEREO_MASK)
- #define DIG_F_STEREO_16 (DIG_F_STEREO_MASK|DIG_F_16BITS_MASK)
- #define DIG_F_ADPCM_MONO_16 (DIG_F_ADPCM_MASK |DIG_F_16BITS_MASK)
- #define DIG_F_ADPCM_STEREO_16 (DIG_F_ADPCM_MASK |DIG_F_16BITS_MASK|DIG_F_STEREO_MASK)
- #define DIG_F_USING_ASI 16
- #define DIG_PCM_SIGN 0x0001 // (obsolete)
- #define DIG_PCM_ORDER 0x0002
- #define DIG_PCM_POLARITY 0x0004 // PCM flags used by driver hardware
- #define DIG_PCM_SPLIT 0x0008
- #define DIG_BUFFER_SERVICE 0x0010
- #define DIG_DUAL_DMA 0x0020
- #define DIG_RECORDING_SUPPORTED 0x8000
- #define WAVE_FORMAT_PCM 1
- #define WAVE_FORMAT_IMA_ADPCM 0x0011
- #ifdef IS_DOS
- #define AIL3DIG 0 // .DIG driver
- #define AIL3MDI 1 // .MDI driver
- #define DIG_DETECT_8_BIT_ONLY 0x0001 // Detect 8-bit DMA only
- #define DIG_DETECT_16_BIT_ONLY 0x0002 // Detect 16-bit DMA only
- #define DIG_DETECT_8_AND_16_BITS 0x0003 // Detect both 8- and 16-bit DMA
- #define DRV_INIT 0x300 // Functions common to .MDI and .DIG
- #define DRV_GET_INFO 0x301 // drivers
- #define DRV_SERVE 0x302
- #define DRV_PARSE_ENV 0x303
- #define DRV_VERIFY_IO 0x304
- #define DRV_INIT_DEV 0x305
- #define DRV_SHUTDOWN_DEV 0x306
- #define DIG_HW_VOLUME 0x400 // .DIG driver functions
- #define DIG_START_P_CMD 0x401
- #define DIG_STOP_P_REQ 0x402
- #define DIG_START_R_CMD 0x403
- #define DIG_STOP_R_REQ 0x404
- #define DIG_VSE 0x405
- #define MDI_HW_VOLUME 0x500 // .MDI driver functions
- #define MDI_INIT_INS_MGR 0x501
- #define MDI_MIDI_XMIT 0x502
- #define MDI_INSTALL_T_SET 0x503
- #define MDI_GET_T_STATUS 0x504
- #define MDI_PROT_UNPROT_T 0x505
- #define MDI_VSE 0x506
- #else
- //
- // Pass to AIL_midiOutOpen for NULL MIDI driver
- //
- #define MIDI_NULL_DRIVER ((U32)(S32)-2)
- #endif
- //
- // Non-specific XMIDI/MIDI controllers and event types
- //
- #define SYSEX_BYTE 105
- #define PB_RANGE 106
- #define CHAN_MUTE 107
- #define CALLBACK_PFX 108
- #define SEQ_BRANCH 109
- #define CHAN_LOCK 110
- #define CHAN_PROTECT 111
- #define VOICE_PROTECT 112
- #define TIMBRE_PROTECT 113
- #define PATCH_BANK_SEL 114
- #define INDIRECT_C_PFX 115
- #define FOR_LOOP 116
- #define NEXT_LOOP 117
- #define CLEAR_BEAT_BAR 118
- #define CALLBACK_TRIG 119
- #define SEQ_INDEX 120
- #define GM_BANK_MSB 0
- #define MODULATION 1
- #define DATA_MSB 6
- #define PART_VOLUME 7
- #define PANPOT 10
- #define EXPRESSION 11
- #define GM_BANK_LSB 32
- #define DATA_LSB 38
- #define SUSTAIN 64
- #define REVERB 91
- #define CHORUS 93
- #define RPN_LSB 100
- #define RPN_MSB 101
- #define RESET_ALL_CTRLS 121
- #define ALL_NOTES_OFF 123
- #define EV_NOTE_OFF 0x80
- #define EV_NOTE_ON 0x90
- #define EV_POLY_PRESS 0xa0
- #define EV_CONTROL 0xb0
- #define EV_PROGRAM 0xc0
- #define EV_CHAN_PRESS 0xd0
- #define EV_PITCH 0xe0
- #define EV_SYSEX 0xf0
- #define EV_ESC 0xf7
- #define EV_META 0xff
- #define META_EOT 0x2f
- #define META_TEMPO 0x51
- #define META_TIME_SIG 0x58
- //
- // SAMPLE.system_data[] usage
- //
- #define SSD_EOD_CALLBACK 0 // Application end-of-data callback if not NULL
- #define VOC_BLK_PTR 1 // Pointer to current block
- #define VOC_REP_BLK 2 // Pointer to beginning of repeat loop block
- #define VOC_N_REPS 3 // # of iterations left in repeat loop
- #define VOC_MARKER 4 // Marker to search for, or -1 if all
- #define VOC_MARKER_FOUND 5 // Desired marker found if 1, else 0
- #define SSD_RELEASE 6 // Release sample handle upon termination if >0
- #ifdef IS_WINDOWS
- #define SSD_EOD_CB_WIN32S 7 // Application end-of-data callback is in Win32s
- #else
- #define SSD_TEMP 7 // Temporary storage location for general use
- #endif
- //
- // Timer status values
- //
- #define AILT_FREE 0 // Timer handle is free for allocation
- #define AILT_STOPPED 1 // Timer is stopped
- #define AILT_RUNNING 2 // Timer is running
- //
- // SAMPLE.status flag values
- //
- #define SMP_FREE 0x0001 // Sample is available for allocation
- #define SMP_DONE 0x0002 // Sample has finished playing, or has
- // never been started
- #define SMP_PLAYING 0x0004 // Sample is playing
- #define SMP_STOPPED 0x0008 // Sample has been stopped
- #define SMP_PLAYINGBUTRELEASED 0x0010 // Sample is playing, but digital handle
- // has been temporarily released
- //
- // SEQUENCE.status flag values
- //
- #define SEQ_FREE 0x0001 // Sequence is available for allocation
- #define SEQ_DONE 0x0002 // Sequence has finished playing, or has
- // never been started
- #define SEQ_PLAYING 0x0004 // Sequence is playing
- #define SEQ_STOPPED 0x0008 // Sequence has been stopped
- #define SEQ_PLAYINGBUTRELEASED 0x0010 // Sequence is playing, but MIDI handle
- // has been temporarily released
- #ifdef IS_DOS
- //
- // MIDI driver types
- //
- #define MDIDRVRTYPE_GM 0 // General MIDI driver (Roland-compatible)
- #define MDIDRVRTYPE_FM_2 1 // 2-operator FM MIDI driver (OPL2)
- #define MDIDRVRTYPE_FM_4 2 // 4-operator FM MIDI driver (OPL3)
- #define MDIDRVRTYPE_SPKR 3 // Tandy or PC speaker "beep" driver
- //
- // .INI installation result codes
- //
- #define AIL_INIT_SUCCESS 0 // Driver installed successfully
- #define AIL_NO_INI_FILE 1 // No MDI.INI or DIG.INI file exists
- #define AIL_INIT_FAILURE 2 // Driver could not be initialized
- #ifdef __BORLANDC__
- #ifndef REALPTR
- #define REALPTR(x) ((void *) (U32) ((((U32) (x))>>16<<4) + ((x) & 0xffff) \
- - AIL_sel_base(_DS)))
- #endif
- #else
- #ifndef REALPTR
- #define REALPTR(x) ((void *) (U32) ((((U32) (x))>>16<<4) + ((x) & 0xffff)))
- #endif
- #endif
- #else
- //
- // AIL_set_direct_buffer_control() command values
- //
- #define AILDS_RELINQUISH 0 // App returns control of secondary buffer
- #define AILDS_SEIZE 1 // App takes control of secondary buffer
- #define AILDS_SEIZE_LOOP 2 // App wishes to loop the secondary buffer
- #endif
- //
- // General type definitions for portability
- //
- #ifndef C8
- #define C8 char
- #endif
- #ifndef U8
- #define U8 unsigned char
- #endif
- #ifndef S8
- #define S8 signed char
- #endif
- #ifndef U16
- #define U16 unsigned short
- #endif
- #ifndef S16
- #define S16 signed short
- #endif
- #ifndef U32
- #define U32 unsigned long
- #endif
- #ifndef S32
- #define S32 signed long
- #endif
- #ifndef F32
- #define F32 float
- #endif
- #ifndef F64
- #define F64 double
- #endif
- #ifndef REALFAR
- #define REALFAR unsigned long
- #endif
- #ifndef FILE_ERRS
- #define FILE_ERRS
- #define AIL_NO_ERROR 0
- #define AIL_IO_ERROR 1
- #define AIL_OUT_OF_MEMORY 2
- #define AIL_FILE_NOT_FOUND 3
- #define AIL_CANT_WRITE_FILE 4
- #define AIL_CANT_READ_FILE 5
- #define AIL_DISK_FULL 6
- #endif
- #define MIN_VAL 0
- #define NOM_VAL 1
- #define MAX_VAL 2
- #ifndef YES
- #define YES 1
- #endif
- #ifndef NO
- #define NO 0
- #endif
- #ifndef TRUE
- #define TRUE 1
- #endif
- #ifndef FALSE
- #define FALSE 0
- #endif
- //
- // Preference names and default values
- //
- #define DIG_RESAMPLING_TOLERANCE 0
- #define DEFAULT_DRT 655 // Resampling triggered at +/- 1%
- #define DIG_MIXER_CHANNELS 1
- #define DEFAULT_DMC 64 // 64 allocatable SAMPLE structures
- #define DIG_DEFAULT_VOLUME 2
- #define DEFAULT_DDV 127 // Default sample volume = 127 (0-127)
- #define MDI_SERVICE_RATE 3
- #define DEFAULT_MSR 120 // XMIDI sequencer timing = 120 Hz
- #define MDI_SEQUENCES 4
- #define DEFAULT_MS 8 // 8 sequence handles/driver
- #define MDI_DEFAULT_VOLUME 5
- #define DEFAULT_MDV 127 // Default sequence volume = 127 (0-127)
- #define MDI_QUANT_ADVANCE 6
- #define DEFAULT_MQA 1 // Beat/bar count +1 interval
- #define MDI_ALLOW_LOOP_BRANCHING 7
- #define DEFAULT_ALB NO // Branches cancel XMIDI FOR loops
- #define MDI_DEFAULT_BEND_RANGE 8
- #define DEFAULT_MDBR 2 // Default pitch-bend range = 2
- #define MDI_DOUBLE_NOTE_OFF 9
- #define DEFAULT_MDNO NO // For stuck notes on SB daughterboards
- #define DIG_ENABLE_RESAMPLE_FILTER 31 // Enable resampling filter by
- #define DEFAULT_DERF YES // default
- #define DIG_DECODE_BUFFER_SIZE 32 // 2K decode buffer size by default
- #define DEFAULT_DDBS 2048
- #ifdef IS_WINDOWS
- #define DIG_USE_MSS_MIXER 33
- #define DEFAULT_DUMM YES // Use MSS mixer with DirectSound
- #define DIG_DS_FRAGMENT_SIZE 34
- #define DEFAULT_DDFS 8 // Use 8 millisecond buffer fragments with DirectSound if MSS mixer in use
- #define DIG_DS_FRAGMENT_CNT 35
- #define DEFAULT_DDFC 96 // Use 96 buffer fragments with DirectSound if MSS mixer in use
- #define DIG_DS_MIX_FRAGMENT_CNT 42
- #define DEFAULT_DDMFC 8 // Mix ahead 8 buffer fragments
- #define DIG_DS_USE_PRIMARY 36
- #define DEFAULT_DDUP NO // Mix into secondary DirectSound buffer by default
- #define DIG_DS_DSBCAPS_CTRL3D 37
- #define DEFAULT_DDDC NO // Do not use DSBCAPS_CTRL3D by default
- #define DIG_DS_CREATION_HANDLER 38
- #define DEFAULT_DDCH NULL // Use DirectSoundCreate() by default
- #define MDI_SYSEX_BUFFER_SIZE 10
- #define DEFAULT_MSBS 1536 // Default sysex buffer = 1536 bytes
- #define DIG_OUTPUT_BUFFER_SIZE 11
- #define DEFAULT_DOBS 49152 // 48K output buffer size
- #define AIL_MM_PERIOD 12
- #define DEFAULT_AMP 5 // Default MM timer period = 5 msec.
- #define AIL_TIMERS 13
- #define DEFAULT_AT 16 // 16 allocatable HTIMER handles
- #define DIG_MIN_CHAIN_ELEMENT_SIZE 14
- #define DEFAULT_MCES 2048 // 2048 bytes/waveOut buffer
- #define DIG_USE_WAVEOUT 15
- #define DEFAULT_DUW NO // Use DirectSound by default
- #define DIG_DS_SECONDARY_SIZE 16
- #define DEFAULT_DDSS (32*1024L) // Must be 2^n -- use 32K by default
- #define DIG_DS_SAMPLE_CEILING 17
- #define DEFAULT_DDSC 44100 // Allow up to 44 kHz samples
- #define AIL_LOCK_PROTECTION 18
- #define DEFAULT_ALP YES // Suspend foreground thread by default
- #define AIL_WIN32S_CALLBACK_SIZE 19
- #define DEFAULT_WCS 4096 // Size of callback data in bytes
- #else
- #define DIG_SERVICE_RATE 10
- #define DEFAULT_DSR 200 // DMA buffer-polling rate = 200 Hz
- #define DIG_HARDWARE_SAMPLE_RATE 11
- #define DEFAULT_DHSR NOM_VAL // Use nominal sample rate by default
- #define DIG_DMA_RESERVE 12
- #define DEFAULT_DDR 32768 // Reserve 32K real-mode mem for DMA
- #define DIG_LATENCY 13
- #define DEFAULT_DL 100 // Half-buffer size in ms = 100
- #define DIG_USE_STEREO 14
- #define DEFAULT_DUS NO // Use mono output only
- #define DIG_USE_16_BITS 15
- #define DEFAULT_DU16 NO // Use 8-bit output by default
- #define DIG_ALLOW_16_BIT_DMA 16
- #define DEFAULT_DA16DMA YES // OK to use 16-bit DMA if necessary
- #define DIG_SS_LOCK 17
- #define DEFAULT_DSL NO // Don't disable IRQs while mixing
- #define AIL_SCAN_FOR_HARDWARE 18
- #define DEFAULT_ASH YES // Scan for I/O settings if necessary
- #define AIL_ALLOW_VDM_EXECUTION 19
- #define DEFAULT_AVE YES // Allow Windows "DOS box" execution
- #endif
- // ----------------------------------
- // DLS Preference names and default values
- // Unless otherwise specified, values must be established
- // BEFORE calling DLSMSSOpen()!
- // ----------------------------------
- #define DLS_TIMEBASE 20
- #define DEFAULT_DTB 120 // 120 intervals/second by default
- #define DLS_VOICE_LIMIT 21
- #define DEFAULT_DVL 24 // 24 voices supported
- #define DLS_BANK_SELECT_ALIAS 22
- #define DEFAULT_DBSA NO // Do not treat controller 114 as bank
- #define DLS_STREAM_BOOTSTRAP 23 // Don't submit first stream buffer
- #define DEFAULT_DSB YES // until at least 2 available
- #define DLS_VOLUME_BOOST 24
- #define DEFAULT_DVB 0 // Boost final volume by 0 dB
- #define DLS_ENABLE_FILTERING 25 // Filtering = on by default
- #define DEFAULT_DEF YES // (may be changed at any time)
- #define AIL_ENABLE_MMX_SUPPORT 27 // Enable MMX support if present
- #define DEFAULT_AEMS YES // (may be changed at any time)
- #define DLS_GM_PASSTHROUGH 28 // Pass unrecognized traffic on to
- #define DEFAULT_DGP YES // default GM driver layer
- // (may be changed at any time)
- #define DLS_ADPCM_TO_ASI_THRESHOLD 39 // Size in samples to switch to ASI
- #define DEFAULT_DATAT 32768
- #ifdef OLD_DLS_REVERB_PREFERENCES
- // these preferences are obsolete - move to the new DLS reverb function.
- // these defines now control nothing and will disappear completely
- // in MSS 6.0
- #define DLS_ENABLE_GLOBAL_REVERB 26 // Global reverb disabled by default
- #define DEFAULT_DEGR NO
- #define DLS_GLOBAL_REVERB_LEVEL 29 // Reverb level 0-127
- #define DEFAULT_GRL 20 // (may be changed at any time)
- #define DLS_GLOBAL_REVERB_TIME 30 // Reverb time in stream buffers
- #define DEFAULT_GRT 1
- #endif
- //
- // Add'l platform-independent prefs
- //
- #define DIG_REVERB_BUFFER_SIZE 40
- #define DEFAULT_DRBS 0 // No reverb support by default
- #define DIG_INPUT_LATENCY 41 // Use >= 250-millisecond input buffers if
- #define DEFAULT_DIL 250 // explicit size request cannot be satisfied
- #define DIG_USE_WAVEIN 43
- #define DEFAULT_DUWI YES // Use waveIn for input by default
- #define N_PREFS 44 // # of preference types
- typedef struct _AILSOUNDINFO {
- S32 format;
- void FAR* data_ptr;
- U32 data_len;
- U32 rate;
- S32 bits;
- S32 channels;
- U32 samples;
- U32 block_size;
- void FAR* initial_ptr;
- } AILSOUNDINFO;
- // for multi-processor machines
- #ifdef IS_WIN32
- #ifdef BUILD_MSS
- #define MSSLockedIncrement(var) _asm { lock inc [var] }
- #define MSSLockedDecrement(var) _asm { lock dec [var] }
- static void __MSSLockedIncrementAddr(void * addr)
- {
- _asm {
- mov eax,[addr]
- lock inc dword ptr [eax]
- }
- }
- static void __MSSLockedDecrementAddr(void * addr)
- {
- _asm {
- mov eax,[addr]
- lock dec dword ptr [eax]
- }
- }
- #define MSSLockedIncrementPtr(var) __MSSLockedIncrementAddr(&(var))
- #define MSSLockedDecrementPtr(var) __MSSLockedDecrementAddr(&(var))
- #else
- #define MSSLockedIncrement(var) (++var)
- #define MSSLockedDecrement(var) (--var)
- #define MSSLockedIncrementPtr(var) (++var)
- #define MSSLockedDecrementPtr(var) (--var)
- #endif
- #else
- #define MSSLockedIncrement(var) (++var)
- #define MSSLockedDecrement(var) (--var)
- #define MSSLockedIncrementPtr(var) (++var)
- #define MSSLockedDecrementPtr(var) (--var)
- #endif
- #ifndef RIB_H // RIB.H contents included if RIB.H not already included
- // #include "rib.h"
- #define RIB_H
- #define ARY_CNT(x) (sizeof((x)) / sizeof((x)[0]))
- // ----------------------------------
- // RIB data types
- // ----------------------------------
- typedef S32 RIBRESULT;
- #define RIB_NOERR 0 // Success -- no error
- #define RIB_NOT_ALL_AVAILABLE 1 // Some requested functions/attribs not available
- #define RIB_NOT_FOUND 2 // Resource not found
- #define RIB_OUT_OF_MEM 3 // Out of system RAM
- //
- // Handle to interface provider
- //
- typedef U32 HPROVIDER;
- //
- // Handle representing token used to obtain attribute or preference
- // data from RIB provider
- //
- typedef U32 HATTRIB;
- //
- // Handle representing an enumerated interface entry
- //
- // RIB_enumerate_interface() returns 1 if valid next entry found, else
- // 0 if end of list reached
- //
- typedef U32 HINTENUM;
- #define HINTENUM_FIRST 0
- //
- // Handle representing an enumerated provider entry
- //
- // RIB_enumerate_providers() returns 1 if valid next entry found, else
- // 0 if end of list reached
- //
- typedef U32 HPROENUM;
- #define HPROENUM_FIRST 0
- //
- // Data types for RIB attributes and preferences
- //
- typedef enum
- {
- RIB_NONE = 0, // No type
- RIB_CUSTOM, // Used for pointers to application-specific structures
- RIB_DEC, // Used for 32-bit integer values to be reported in decimal
- RIB_HEX, // Used for 32-bit integer values to be reported in hex
- RIB_FLOAT, // Used for 32-bit single-precision FP values
- RIB_PERCENT, // Used for 32-bit single-precision FP values to be reported as percentages
- RIB_BOOL, // Used for Boolean-constrained integer values to be reported as TRUE or FALSE
- RIB_STRING // Used for pointers to null-terminated ASCII strings
- }
- RIB_DATA_SUBTYPE;
- //
- // RIB_ENTRY_TYPE structure, used to register an interface or request one
- //
- typedef enum
- {
- RIB_FUNCTION = 0,
- RIB_ATTRIBUTE, // Attribute: read-only data type used for status/info communication
- RIB_PREFERENCE // Preference: read/write data type used to control behavior
- }
- RIB_ENTRY_TYPE;
- //
- // RIB_INTERFACE_ENTRY, used to represent a function or data entry in an
- // interface
- //
- typedef struct
- {
- RIB_ENTRY_TYPE type; // See list above
- C8 FAR *entry_name; // Name of desired function or attribute
- U32 token; // Function pointer or attribute token
- RIB_DATA_SUBTYPE subtype; // Data (attrib or preference) subtype
- }
- RIB_INTERFACE_ENTRY;
- //
- // Standard RAD Interface Broker provider identification attributes
- //
- #define PROVIDER_NAME (-100) // RIB_STRING name of decoder
- #define PROVIDER_VERSION (-101) // RIB_HEX BCD version number
- //
- // Standard function to obtain provider attributes (see PROVIDER_ defines
- // above)
- //
- // Each provider of a searchable interface must export this function
- //
- typedef U32 (AILCALL FAR *PROVIDER_QUERY_ATTRIBUTE) (HATTRIB index);
- //
- // Macros to simplify interface registrations/requests for functions,
- // attributes, and preferences
- //
- #define FN(entry_name) { RIB_FUNCTION, #entry_name, (U32) &(entry_name), RIB_NONE }
- #define REG_FN(entry_name) { RIB_FUNCTION, #entry_name, (U32) &(entry_name), RIB_NONE }
- #define AT(entry_name,ID) { RIB_ATTRIBUTE, (entry_name), (U32) &(ID), RIB_NONE }
- #define REG_AT(entry_name,ID,subtype) { RIB_ATTRIBUTE, (entry_name), (U32) (ID), subtype }
- #define PR(entry_name,ID) { RIB_PREFERENCE, (entry_name), (U32) &(ID), RIB_NONE }
- #define REG_PR(entry_name,ID,subtype) { RIB_PREFERENCE, (entry_name), (U32) (ID), subtype }
- #define RIB_register(x,y,z) RIB_register_interface (HPROVIDER(x), y, ARY_CNT(z), z)
- #define RIB_unregister(x,y,z) RIB_unregister_interface(HPROVIDER(x), y, ARY_CNT(z), z)
- #define RIB_unregister_all(x) RIB_unregister_interface(HPROVIDER(x), NULL, 0, NULL)
- #define RIB_free_libraries() RIB_free_provider_library(HPROVIDER(NULL));
- #define RIB_request(x,y,z) RIB_request_interface (x, y, ARY_CNT(z), z)
- // ----------------------------------
- // Standard RIB API prototypes
- // ----------------------------------
- DXDEC HPROVIDER AILCALL RIB_alloc_provider_handle (U32 module);
- DXDEC void AILCALL RIB_free_provider_handle (HPROVIDER provider);
- DXDEC HPROVIDER AILCALL RIB_load_provider_library (C8 FAR *filename);
- DXDEC void AILCALL RIB_free_provider_library (HPROVIDER provider);
- DXDEC HPROVIDER AILCALL RIB_provider_library_handle (void);
- DXDEC RIBRESULT AILCALL RIB_register_interface (HPROVIDER provider,
- C8 FAR *interface_name,
- S32 entry_count,
- const RIB_INTERFACE_ENTRY FAR *rlist);
- DXDEC RIBRESULT AILCALL RIB_unregister_interface (HPROVIDER provider,
- C8 FAR *interface_name,
- S32 entry_count,
- const RIB_INTERFACE_ENTRY FAR *rlist);
- DXDEC RIBRESULT AILCALL RIB_request_interface (HPROVIDER provider,
- C8 FAR *interface_name,
- S32 entry_count,
- RIB_INTERFACE_ENTRY FAR *rlist);
- DXDEC RIBRESULT AILCALL RIB_request_interface_entry (HPROVIDER provider,
- C8 FAR *interface_name,
- RIB_ENTRY_TYPE entry_type,
- C8 FAR *entry_name,
- U32 FAR *token);
- DXDEC S32 AILCALL RIB_enumerate_interface (HPROVIDER provider,
- C8 FAR *interface_name,
- RIB_ENTRY_TYPE type,
- HINTENUM FAR *next,
- RIB_INTERFACE_ENTRY FAR *dest);
- DXDEC S32 AILCALL RIB_enumerate_providers (C8 FAR *interface_name,
- HPROENUM FAR *next,
- HPROVIDER FAR *dest);
- DXDEC C8 FAR * AILCALL RIB_type_string (U32 data,
- RIB_DATA_SUBTYPE subtype);
- DXDEC HPROVIDER AILCALL RIB_find_file_provider (C8 FAR *interface_name,
- C8 FAR *attribute_name,
- C8 FAR *file_suffix);
- DXDEC HPROVIDER AILCALL RIB_find_provider (C8 FAR *interface_name,
- C8 FAR *attribute_name,
- C8 FAR *attribute_value);
- DXDEC S32 AILCALL RIB_load_application_providers
- (C8 FAR *filespec);
- DXDEC void AILCALL RIB_set_provider_user_data (HPROVIDER provider,
- U32 index,
- S32 value);
- DXDEC S32 AILCALL RIB_provider_user_data (HPROVIDER provider,
- U32 index);
- DXDEC void AILCALL RIB_set_provider_system_data
- (HPROVIDER provider,
- U32 index,
- S32 value);
- DXDEC S32 AILCALL RIB_provider_system_data (HPROVIDER provider,
- U32 index);
- DXDEC C8 FAR * AILCALL RIB_error (void);
- #endif
- #ifndef MSS_ASI_VERSION // MSSASI.H contents included if MSSASI.H not already included
- // #include "mssasi.h"
- #define AIL_ASI_VERSION 1
- #define AIL_ASI_REVISION 0
- //
- // Handle to stream being managed by ASI codec
- //
- typedef S32 HASISTREAM;
- //
- // ASI result codes
- //
- typedef S32 ASIRESULT;
- #define ASI_NOERR 0 // Success -- no error
- #define ASI_NOT_ENABLED 1 // ASI not enabled
- #define ASI_ALREADY_STARTED 2 // ASI already started
- #define ASI_INVALID_PARAM 3 // Invalid parameters used
- #define ASI_INTERNAL_ERR 4 // Internal error in ASI driver
- #define ASI_OUT_OF_MEM 5 // Out of system RAM
- #define ASI_ERR_NOT_IMPLEMENTED 6 // Feature not implemented
- #define ASI_NOT_FOUND 7 // ASI supported device not found
- #define ASI_NOT_INIT 8 // ASI not initialized
- #define ASI_CLOSE_ERR 9 // ASI not closed correctly
- // ----------------------------------
- // Application-provided ASI callbacks
- // ----------------------------------
- //
- // AILASIFETCHCB: Called by ASI to obtain data from stream source
- //
- // offset normally will be either 0 at the first call made by the codec
- // or -1 to specify a continuous stream, except when ASI_stream_seek()
- // is called to restart the stream codec at a new stream offset. In this
- // case, the application must execute the seek operation on the ASI codec's
- // behalf.
- //
- // In response to this callback, the application should read the requested
- // data and copy it to the specified destination buffer, returning the number
- // of bytes copied (which can be less than bytes_requested if the end of
- // the stream is reached).
- //
- typedef S32 (AILCALLBACK FAR * AILASIFETCHCB) (U32 user, // User value passed to ASI_open_stream()
- void FAR *dest, // Location to which stream data should be copied by app
- S32 bytes_requested, // # of bytes requested by ASI codec
- S32 offset); // If not -1, application should seek to this point in stream
- //############################################################################
- //## ##
- //## Interface "ASI codec" ##
- //## ##
- //############################################################################
- //
- // Initialize ASI stream codec
- //
- // No other ASI functions may be called outside an ASI_startup() /
- // ASI_shutdown() pair, except for the standard RIB function
- // PROVIDER_query_attribute(). All provider attributes must be accessible
- // without starting up the codec.
- //
- typedef ASIRESULT (AILCALL FAR *ASI_STARTUP)(void);
- //
- // Shut down ASI codec
- //
- typedef ASIRESULT (AILCALL FAR *ASI_SHUTDOWN)(void);
- //
- // Return codec error message, or NULL if no errors have occurred since
- // last call
- //
- // The ASI error text state is global to all streams
- //
- typedef C8 FAR * (AILCALL FAR *ASI_ERROR)(void);
- //############################################################################
- //## ##
- //## Interface "ASI stream" ##
- //## ##
- //############################################################################
- //
- // Open a stream, returning handle to stream
- //
- typedef HASISTREAM (AILCALL FAR *ASI_STREAM_OPEN) (U32 user, // User value passed to fetch callback
- AILASIFETCHCB fetch_CB, // Source data fetch handler
- U32 total_size); // Total size for %-done calculations (0=unknown)
- //
- // Translate data in stream, returning # of bytes actually decoded or encoded
- //
- // Any number of bytes may be requested. Requesting more data than is
- // available in the codec's internal buffer will cause the AILASIFETCHCB
- // handler to be called to fetch more data from the stream.
- //
- typedef S32 (AILCALL FAR *ASI_STREAM_PROCESS) (HASISTREAM stream, // Handle of stream
- void FAR *buffer, // Destination for processed data
- S32 buffer_size); // # of bytes to return in buffer
- //
- // Restart stream decoding process at new offset
- //
- // Relevant for decoders only
- //
- // Seek destination is given as offset in bytes from beginning of stream
- //
- // At next ASI_stream_process() call, decoder will seek to the closest possible
- // point in the stream which occurs at or after the specified position
- //
- // This function has no effect for decoders which do not support random
- // seeks on a given stream type
- //
- // Warning: some decoders may need to implement seeking by reparsing
- // the entire stream up to the specified offset, through multiple calls
- // to the data-fetch callback. This operation may be extremely
- // time-consuming on large files or slow network connections.
- //
- // A stream_offset value of -1 may be used to inform the decoder that the
- // application has changed the input stream offset on its own, e.g. for a
- // double-buffering application where the ASI decoder is not accessing the
- // stream directly. ASI decoders should respond to this by flushing all
- // internal buffers and resynchronizing themselves to the data stream.
- //
- typedef ASIRESULT (AILCALL FAR *ASI_STREAM_SEEK) (HASISTREAM stream,
- S32 stream_offset);
- //
- // Retrieve an ASI stream attribute or preference value by index
- //
- typedef S32 (AILCALL FAR *ASI_STREAM_ATTRIBUTE) (HASISTREAM stream,
- HATTRIB attrib);
- //
- // Set an ASI stream preference value by index
- //
- typedef S32 (AILCALL FAR *ASI_STREAM_SET_PREFERENCE) (HASISTREAM stream,
- HATTRIB preference,
- void FAR* value);
- //
- // Close stream, freeing handle and all internally-allocated resources
- //
- typedef ASIRESULT (AILCALL FAR *ASI_STREAM_CLOSE) (HASISTREAM stream);
- #endif
- //############################################################################
- //## ##
- //## Interface "MSS 3D audio services" ##
- //## ##
- //############################################################################
- //
- // 3D positioning services
- //
- typedef struct h3DPOBJECT
- {
- U32 junk;
- } h3DPOBJECT;
- typedef h3DPOBJECT FAR * H3DPOBJECT;
- typedef H3DPOBJECT H3DSAMPLE;
- //
- // M3D result codes
- //
- typedef S32 M3DRESULT;
- #define M3D_NOERR 0 // Success -- no error
- #define M3D_NOT_ENABLED 1 // M3D not enabled
- #define M3D_ALREADY_STARTED 2 // M3D already started
- #define M3D_INVALID_PARAM 3 // Invalid parameters used
- #define M3D_INTERNAL_ERR 4 // Internal error in M3D driver
- #define M3D_OUT_OF_MEM 5 // Out of system RAM
- #define M3D_ERR_NOT_IMPLEMENTED 6 // Feature not implemented
- #define M3D_NOT_FOUND 7 // M3D supported device not found
- #define M3D_NOT_INIT 8 // M3D not initialized
- #define M3D_CLOSE_ERR 9 // M3D not closed correctly
- typedef M3DRESULT (AILCALL FAR *M3D_STARTUP)(void);
- typedef M3DRESULT (AILCALL FAR *M3D_SHUTDOWN)(void);
- typedef C8 FAR * (AILCALL FAR *M3D_ERROR)(void);
- typedef S32 (AILCALL FAR *M3D_SET_PROVIDER_PREFERENCE)(HATTRIB preference,
- void FAR* value);
- typedef M3DRESULT (AILCALL FAR * M3D_ACTIVATE)(S32 enable);
- typedef H3DSAMPLE (AILCALL FAR * M3D_ALLOCATE_3D_SAMPLE_HANDLE)(void);
-
- typedef void (AILCALL FAR * M3D_RELEASE_3D_SAMPLE_HANDLE)(H3DSAMPLE samp);
-
- typedef void (AILCALL FAR * M3D_START_3D_SAMPLE)(H3DSAMPLE samp);
- typedef void (AILCALL FAR * M3D_STOP_3D_SAMPLE)(H3DSAMPLE samp);
-
- typedef void (AILCALL FAR * M3D_RESUME_3D_SAMPLE)(H3DSAMPLE samp);
-
- typedef void (AILCALL FAR * M3D_END_3D_SAMPLE)(H3DSAMPLE samp);
- typedef S32 (AILCALL FAR * M3D_SET_3D_SAMPLE_DATA)(H3DSAMPLE samp,
- AILSOUNDINFO FAR *info);
- typedef void (AILCALL FAR * M3D_SET_3D_SAMPLE_VOLUME)(H3DSAMPLE samp,
- S32 volume);
-
- typedef void (AILCALL FAR * M3D_SET_3D_SAMPLE_PLAYBACK_RATE)(H3DSAMPLE samp,
- S32 playback_rate);
- typedef void (AILCALL FAR * M3D_SET_3D_SAMPLE_OFFSET)(H3DSAMPLE samp,
- U32 offset);
- typedef void (AILCALL FAR * M3D_SET_3D_SAMPLE_LOOP_COUNT)(H3DSAMPLE samp,
- U32 loops);
- typedef void (AILCALL FAR * M3D_SET_3D_SAMPLE_LOOP_BLOCK)(H3DSAMPLE S,
- S32 loop_start_offset,
- S32 loop_end_offset);
- typedef U32 (AILCALL FAR * M3D_3D_SAMPLE_STATUS)(H3DSAMPLE samp);
- typedef U32 (AILCALL FAR * M3D_3D_SAMPLE_ATTRIBUTE)(H3DSAMPLE samp, HATTRIB index);
- typedef S32 (AILCALL FAR * M3D_3D_SET_SAMPLE_PREFERENCE)(H3DSAMPLE samp, HATTRIB preference, void FAR* value);
- typedef S32 (AILCALL FAR * M3D_3D_SAMPLE_VOLUME)(H3DSAMPLE samp);
- typedef S32 (AILCALL FAR * M3D_3D_SAMPLE_PLAYBACK_RATE)(H3DSAMPLE samp);
- typedef U32 (AILCALL FAR * M3D_3D_SAMPLE_OFFSET)(H3DSAMPLE samp);
- typedef U32 (AILCALL FAR * M3D_3D_SAMPLE_LENGTH)(H3DSAMPLE samp);
- typedef U32 (AILCALL FAR * M3D_3D_SAMPLE_LOOP_COUNT)(H3DSAMPLE samp);
- typedef void (AILCALL FAR * M3D_SET_3D_SAMPLE_DISTANCES)(H3DSAMPLE samp,
- F32 max_front_dist,
- F32 min_front_dist,
- F32 max_back_dist,
- F32 min_back_dist);
- typedef void (AILCALL FAR * M3D_3D_SAMPLE_DISTANCES)(H3DSAMPLE samp,
- F32 FAR * max_front_dist,
- F32 FAR * min_front_dist,
- F32 FAR * max_back_dist,
- F32 FAR * min_back_dist);
- typedef S32 (AILCALL FAR * M3D_ACTIVE_3D_SAMPLE_COUNT)(void);
- typedef H3DPOBJECT (AILCALL FAR * M3D_3D_OPEN_LISTENER)(void);
- typedef void (AILCALL FAR * M3D_3D_CLOSE_LISTENER)(H3DPOBJECT listener);
- typedef H3DPOBJECT (AILCALL FAR * M3D_3D_OPEN_OBJECT)(void);
- typedef void (AILCALL FAR * M3D_3D_CLOSE_OBJECT)(H3DPOBJECT obj);
- typedef void (AILCALL FAR * M3D_SET_3D_POSITION)(H3DPOBJECT obj,
- F32 X,
- F32 Y,
- F32 Z);
- typedef void (AILCALL FAR * M3D_SET_3D_VELOCITY)(H3DPOBJECT obj,
- F32 dX_per_ms,
- F32 dY_per_ms,
- F32 dZ_per_ms,
- F32 magnitude);
- typedef void (AILCALL FAR * M3D_SET_3D_VELOCITY_VECTOR)(H3DPOBJECT obj,
- F32 dX_per_ms,
- F32 dY_per_ms,
- F32 dZ_per_ms);
- typedef void (AILCALL FAR * M3D_SET_3D_ORIENTATION)(H3DPOBJECT obj,
- F32 X_face,
- F32 Y_face,
- F32 Z_face,
- F32 X_up,
- F32 Y_up,
- F32 Z_up);
- typedef void (AILCALL FAR * M3D_3D_POSITION)(H3DPOBJECT obj,
- F32 FAR *X,
- F32 FAR *Y,
- F32 FAR *Z);
- typedef void (AILCALL FAR * M3D_3D_VELOCITY)(H3DPOBJECT obj,
- F32 FAR *dX_per_ms,
- F32 FAR *dY_per_ms,
- F32 FAR *dZ_per_ms);
- typedef void (AILCALL FAR * M3D_3D_ORIENTATION)(H3DPOBJECT obj,
- F32 FAR *X_face,
- F32 FAR *Y_face,
- F32 FAR *Z_face,
- F32 FAR *X_up,
- F32 FAR *Y_up,
- F32 FAR *Z_up);
- typedef void (AILCALL FAR * M3D_3D_UPDATE_POSITION)(H3DPOBJECT obj,
- F32 dt_milliseconds);
- typedef void (AILCALL FAR * M3D_3D_AUTO_UPDATE_POSITION)(H3DPOBJECT obj,
- S32 enable);
- //############################################################################
- //## ##
- //## Interface "MSS mixer services" ##
- //## ##
- //############################################################################
- //
- // Operation flags used by mixer module
- //
- #define M_DEST_STEREO 1 // Set to enable stereo mixer output
- #define M_SRC_16 2 // Set to enable mixing of 16-bit samples
- #define M_FILTER 4 // Set to enable filtering when resampling
- #define M_SRC_STEREO 8 // Set to enable mixing of stereo input samples
- #define M_VOL_SCALING 16 // Set to enable volume scalars other than 2047
- #define M_RESAMPLE 32 // Set to enable playback ratios other than 65536
- #define M_ORDER 64 // Set to reverse L/R stereo order for sample
- #ifdef IS_32
- //
- // Initialize mixer
- //
- // No other mixer functions may be called outside a MIXER_startup() /
- // MIXER_shutdown() pair, except for the standard RIB function
- // PROVIDER_query_attribute(). All provider attributes must be accessible
- // without starting up the module.
- //
- typedef void (AILCALL FAR *MIXER_STARTUP)(void);
- //
- // Shut down mixer
- //
- typedef void (AILCALL FAR *MIXER_SHUTDOWN)(void);
- //
- // Flush mixer buffer
- //
- typedef void (AILCALL FAR *MIXER_FLUSH) (S32 FAR *dest,
- S32 len,
- S32 FAR *reverb_buffer,
- S32 reverb_level,
- U32 MMX_available);
- //
- // Perform audio mixing operation
- //
- typedef void (AILCALL FAR *MIXER_MERGE) (void FAR * FAR *src,
- U32 FAR *src_fract,
- void FAR *src_end,
- S32 FAR * FAR *dest,
- void FAR *dest_end,
- S32 FAR *left_val,
- S32 FAR *right_val,
- S32 playback_ratio,
- S32 scale_left,
- S32 scale_right,
- U32 operation,
- U32 MMX_available);
- //
- // Translate mixer buffer contents to final output format
- //
- typedef void (AILCALL FAR *MIXER_COPY) (void FAR *src,
- S32 src_len,
- void FAR *dest,
- U32 operation,
- U32 MMX_available);
- #else
- //
- // Initialize mixer
- //
- // No other mixer functions may be called outside a MIXER_startup() /
- // MIXER_shutdown() pair, except for the standard RIB function
- // PROVIDER_query_attribute(). All provider attributes must be accessible
- // without starting up the module.
- //
- typedef void (AILCALL FAR *MIXER_STARTUP)(void);
- //
- // Shut down mixer
- //
- typedef void (AILCALL FAR *MIXER_SHUTDOWN)(void);
- //
- // Flush mixer buffer
- //
- typedef void (AILCALL FAR *MIXER_FLUSH) (S32 FAR *dest,
- S32 len,
- S32 FAR *reverb_buffer,
- S32 reverb_level,
- U32 MMX_available);
- //
- // Perform audio mixing operation
- //
- typedef void (AILCALL FAR *MIXER_MERGE) (U32 src_sel,
- U32 dest_sel,
- U32 FAR *src_fract,
- U32 FAR *src_offset,
- U32 FAR *dest_offset,
- U32 src_end_offset,
- U32 dest_end_offset,
- S32 FAR *left_val,
- S32 FAR *right_val,
- S32 playback_ratio,
- S32 scale_both,
- U32 operation);
- //
- // Translate mixer buffer contents to final output format
- //
- typedef void (AILCALL FAR *MIXER_COPY) (void FAR *src,
- S32 src_len,
- void FAR *dest,
- U32 operation,
- U32 MMX_available);
- #endif
- //
- // Type definitions
- //
- struct _DIG_DRIVER;
- struct _MDI_DRIVER;
- typedef struct _DIG_DRIVER FAR * HDIGDRIVER; // Handle to digital driver
- typedef struct _MDI_DRIVER FAR * HMDIDRIVER; // Handle to XMIDI driver
- typedef struct _SAMPLE FAR * HSAMPLE; // Handle to sample
- typedef struct _SEQUENCE FAR * HSEQUENCE; // Handle to sequence
- typedef S32 HTIMER; // Handle to timer
- #ifdef IS_DOS
- //
- // Type definitions
- //
- typedef struct // I/O parameters structure
- {
- S16 IO;
- S16 IRQ;
- S16 DMA_8_bit;
- S16 DMA_16_bit;
- S32 IO_reserved[4];
- }
- IO_PARMS;
- typedef struct // Standard MSS 3.X VDI driver header
- {
- S8 ID[8]; // "AIL3xxx" ID string, followed by ^Z
- U32 driver_version;
- REALFAR common_IO_configurations;
- U16 num_IO_configurations;
- REALFAR environment_string;
- IO_PARMS IO;
- S16 service_rate;
- U16 busy;
- U16 driver_num; // Driver number
- U16 this_ISR; // Offset of INT 66H dispatcher
- REALFAR prev_ISR; // Pointer to previous INT 66H ISR
- S8 scratch[128]; // Shared scratch workspace
- S8 dev_name[80]; // Device name (VDI version >= 1.12 only)
- }
- VDI_HDR;
- typedef struct
- {
- U16 minimum_physical_sample_rate;
- U16 nominal_physical_sample_rate;
- U16 maximum_physical_sample_rate;
- U16 minimum_DMA_half_buffer_size;
- U16 maximum_DMA_half_buffer_size;
- U32 flags;
- }
- DIG_MODE;
- typedef struct
- {
- U8 format_supported[16];
- DIG_MODE format_data[16];
- }
- DIG_DDT;
- typedef struct
- {
- REALFAR DMA_buffer_A;
- REALFAR DMA_buffer_B;
- S16 active_buffer;
- }
- DIG_DST;
- typedef struct
- {
- REALFAR library_environment;
- REALFAR GTL_suffix;
- U16 num_voices;
- U16 max_melodic_channel;
- U16 min_melodic_channel;
- U16 percussion_channel;
- }
- MDI_DDT;
- typedef struct
- {
- S8 library_directory[128];
- S8 GTL_filename[128];
- S8 MIDI_data[512];
- }
- MDI_DST;
- typedef struct // Initialization file structure
- {
- char device_name[128]; // Device name
- char driver_name[128]; // Driver filename
- IO_PARMS IO; // I/O parameters for driver
- }
- AIL_INI;
- typedef struct // Handle to driver
- {
- REALFAR seg; // Seg:off pointer to driver (off=0)
- U32 sel; // Selector for driver (off=0)
- void *buf; // Protected-mode pointer to driver
- U32 size; // Size of driver image
- VDI_HDR *VHDR; // Pointer to driver header (same as buf)
- S32 type; // AIL3DIG or AIL3MDI (see below)
- S32 initialized; // 1 if hardware successfully init'd, else 0
- S32 PM_ISR; // -1 if no PM ISR hooked, else IRQ #
- HTIMER server; // DRV_SERVE periodic timer, if requested
- // Vector to high-level destructor, if any
- void (AILCALL *destructor)(HDIGDRIVER);
- // High-level descriptor (DIG_ or MDI_DRIVER)
- void *descriptor;
- }
- AIL_DRIVER;
- typedef struct // VDI interface register structure
- {
- S16 AX;
- S16 BX;
- S16 CX;
- S16 DX;
- S16 SI;
- S16 DI;
- }
- VDI_CALL;
- #endif
- //
- // Function pointer types
- //
- typedef void (AILCALLBACK FAR* AILINCB) (void FAR *data, S32 len, U32 user);
- typedef void (AILCALLBACK FAR* AILTIMERCB) (U32 user);
- typedef void (AILCALLBACK FAR* AILSAMPLECB) (HSAMPLE sample);
- typedef S32 (AILCALLBACK FAR* AILEVENTCB) (HMDIDRIVER hmi,HSEQUENCE seq,S32 status,S32 data_1,S32 data_2);
- typedef S32 (AILCALLBACK FAR* AILTIMBRECB) (HMDIDRIVER hmi,S32 bank,S32 patch);
- typedef S32 (AILCALLBACK FAR* AILPREFIXCB) (HSEQUENCE seq,S32 log,S32 data);
- typedef void (AILCALLBACK FAR* AILTRIGGERCB) (HSEQUENCE seq,S32 log,S32 data);
- typedef void (AILCALLBACK FAR* AILBEATCB) (HMDIDRIVER hmi,HSEQUENCE seq,S32 beat,S32 measure);
- typedef void (AILCALLBACK FAR* AILSEQUENCECB) (HSEQUENCE seq);
- //
- // Handle to sample and driver being managed by pipeline filter
- //
- typedef S32 HSAMPLESTATE;
- typedef S32 HDRIVERSTATE;
- //
- // Digital pipeline stages
- //
- // These are the points at which external modules may be installed into
- // a given HSAMPLE or HDIGDRIVER's processing pipeline
- //
- typedef enum
- {
- DP_ASI_DECODER=0, // Must be "ASI codec stream" provider
- DP_FILTER, // Must be "MSS pipeline filter" provider
- DP_MERGE, // Must be "MSS mixer" provider
- N_SAMPLE_STAGES, // Placeholder for end of list (= # of valid stages)
- SAMPLE_ALL_STAGES // Used to signify all pipeline stages, for shutdown
- }
- SAMPLESTAGE;
- typedef enum
- {
- DP_FLUSH = 0, // Must be "MSS mixer" provider
- DP_DEFAULT_FILTER, // Must be "MSS pipeline filter" provider (sets the default)
- DP_DEFAULT_MERGE, // Must be "MSS mixer" provider (sets the default)
- DP_COPY, // Must be "MSS mixer" provider
- N_DIGDRV_STAGES, // Placeholder for end of list (= # of valid stages)
- DIGDRV_ALL_STAGES // Used to signify all pipeline stages, for shutdown
- }
- DIGDRVSTAGE;
- typedef struct
- {
- ASI_STREAM_OPEN ASI_stream_open;
- ASI_STREAM_PROCESS ASI_stream_process;
- ASI_STREAM_SEEK ASI_stream_seek;
- ASI_STREAM_CLOSE ASI_stream_close;
- ASI_STREAM_ATTRIBUTE ASI_stream_attribute;
- ASI_STREAM_SET_PREFERENCE ASI_stream_set_preference;
- HATTRIB INPUT_BIT_RATE;
- HATTRIB INPUT_SAMPLE_RATE;
- HATTRIB INPUT_BITS;
- HATTRIB INPUT_CHANNELS;
- HATTRIB OUTPUT_BIT_RATE;
- HATTRIB OUTPUT_SAMPLE_RATE;
- HATTRIB OUTPUT_BITS;
- HATTRIB OUTPUT_CHANNELS;
- HATTRIB POSITION;
- HATTRIB PERCENT_DONE;
- HATTRIB MIN_INPUT_BLOCK_SIZE;
- HATTRIB RAW_RATE;
- HATTRIB RAW_BITS;
- HATTRIB RAW_CHANNELS;
- HATTRIB REQUESTED_RATE;
- HATTRIB REQUESTED_BITS;
- HATTRIB REQUESTED_CHANS;
- HASISTREAM stream;
- }
- ASISTAGE;
- typedef struct
- {
- MIXER_FLUSH MSS_mixer_flush;
- MIXER_MERGE MSS_mixer_merge;
- MIXER_COPY MSS_mixer_copy;
- }
- MIXSTAGE;
- typedef struct
- {
- struct _FLTPROVIDER FAR *provider;
- HSAMPLESTATE sample_state;
- }
- FLTSTAGE;
- typedef struct
- {
- S32 active; // Pass-through if 0, active if 1
- HPROVIDER provider;
- union
- {
- ASISTAGE ASI;
- MIXSTAGE MIX;
- FLTSTAGE FLT;
- }
- TYPE;
- }
- DPINFO;
- //
- // Other data types
- //
- typedef enum _AILDUPMODE
- {
- AIL_HALF_DUPLEX,
- AIL_FULL_DUPLEX
- }
- AILDUPMODE;
- #define AIL_FORCE_DUPLEX 1 // Force specified duplex mode to be used, else fail
- #define AIL_FORCE_MODE 2 // Force specified format/rate to be used, else fail
- #define AIL_FORCE_BUFSIZE 4 // Force specified input buffer size to be used, else fail
- typedef struct _AILINPUTINFO // Input descriptor type
- {
- U32 device_ID; // DS LPGUID or wave device ID
- U32 hardware_format; // e.g., DIG_F_STEREO_16
- U32 hardware_rate; // e.g., 22050
- AILDUPMODE duplex_mode; // AIL_HALF_DUPLEX | AIL_FULL_DUPLEX
- AILINCB callback; // Callback function to receive incoming data
- S32 buffer_size; // Maximum # of bytes to be passed to callback (-1 to use DIG_INPUT_LATENCY)
- }
- AILINPUTINFO;
- typedef struct _AILTIMER // Timer instance
- {
- U32 status;
- AILTIMERCB callback;
- U32 user;
- S32 elapsed;
- S32 value;
- S32 callingCT; // Calling EXE's task number (16 bit only)
- S32 callingDS; // Calling EXE's DS (used in 16 bit only)
- S32 IsWin32s; // Is this a Win32s callback
- } AILTIMERSTR;
- typedef struct _ADPCMDATATAG
- {
- U32 blocksize;
- U32 extrasamples;
- U32 blockleft;
- U32 step;
- U32 savesrc;
- U32 sample;
- U32 destend;
- U32 srcend;
- U32 samplesL;
- U32 samplesR;
- U16 moresamples[16];
- } ADPCMDATA;
- typedef struct _SAMPLE // Sample instance
- {
- char tag[4]; // HSAM
- HDIGDRIVER driver; // Driver for playback
- U32 status; // SMP_ flags: _FREE, _DONE, _PLAYING
- void FAR *start[2]; // Sample buffer address (W)
- U32 len [2]; // Sample buffer size in bytes (W)
- U32 pos [2]; // Index to next byte (R/W)
- U32 done [2]; // Nonzero if buffer with len=0 sent by app
- U32 src_fract; // Fractional part of source address
- S32 left_val; // Mixer source value from end of last buffer
- S32 right_val; // Mixer source value from end of last buffer
- S32 current_buffer; // Buffer # active (0/1)
- S32 last_buffer; // Last active buffer (for double-buffering)
- S32 starved; // Buffer stream has run out of data
- S32 loop_count; // # of cycles-1 (1=one-shot, 0=indefinite)
- S32 loop_start; // Starting offset of loop block (0=SOF)
- S32 loop_end; // End offset of loop block (-1=EOF)
- S32 format; // DIG_F format (8/16 bits, mono/stereo)
- U32 flags; // DIG_PCM_SIGN / DIG_PCM_ORDER (stereo only)
- S32 playback_rate; // Playback rate in hertz
- S32 volume; // Sample volume 0-127
- S32 pan; // Mono panpot/stereo balance (0=L ... 127=R)
- S32 left_scale; // Left/mono volume scalar 0-2047
- S32 right_scale; // Right volume scalar 0-2047
- S32 service_type; // 1 if single-buffered; 2 if streamed
- AILSAMPLECB SOB; // Start-of-block callback function
- AILSAMPLECB EOB; // End-of-buffer callback function
- AILSAMPLECB EOS; // End-of-sample callback function
- S32 user_data [8]; // Miscellaneous user data
- S32 system_data[8]; // Miscellaneous system data
- ADPCMDATA adpcm;
- #ifdef IS_WINDOWS
- S32 SOB_IsWin32s; // Is this a Win32s callback
- S32 EOB_IsWin32s; // Is this a Win32s callback
- S32 EOS_IsWin32s; // Is this a Win32s callback
- //
- // DirectSound-specific data
- //
- S32 secondary_buffer; // Secondary buffer index
- S32 service_interval; // Service sample every n ms
- S32 service_tick; // Current service countdown value
- S32 buffer_segment_size; // Buffer segment size to fill
- S32 prev_segment; // Previous segment # (0...n)
- S32 prev_cursor; // Previous play cursor location
- S32 bytes_remaining; // # of bytes left to play (if not -1)
- S32 direct_control; // 1 if app controls buffer, 0 if MSS
- #endif
- S32 doeob; // Flags to trigger callbacks
- S32 dosob;
- S32 doeos;
- //
- // Sample pipeline stages
- //
- DPINFO pipeline[N_SAMPLE_STAGES];
- //
- // Reverb parms
- //
- F32 reverb_level; // Level [0.0, 1.0]
- F32 reverb_reflect_time; // Reflect time in milliseconds
- F32 reverb_decay_time; // Decay time [0.1, 20.0]
- S32 base_scale; // Original 12-bit volume scalar
- }
- SAMPLE;
- #ifdef IS_WINDOWS
- typedef struct _DIG_INPUT_DRIVER FAR *HDIGINPUT; // Handle to digital input driver
- typedef struct _DIG_INPUT_DRIVER // Handle to digital input driver
- {
- C8 tag[4]; // HDIN
- HTIMER background_timer; // Background timer handle
- AILINPUTINFO info; // Input device descriptor
- U32 callback_user; // Callback user value
- //
- // Provider-independent data
- //
- U32 DMA_size; // Size of each DMA sub-buffer in bytes
- void FAR *DMA[2]; // Simulated DMA buffers
- U8 silence; // Silence value for current format (0 or 128)
- S32 input_enabled; // 1 if enabled, 0 if not
- S32 device_active; // 1 if buffers submittable, 0 if not
- //
- // waveOut-specific data
- //
- HWAVEIN hWaveIn; // Handle to wave input device
- volatile WAVEHDR wavehdr[2]; // Handles to wave headers
- }
- DIG_INPUT_DRIVER;
- #endif
- typedef struct _DIG_DRIVER // Handle to digital audio driver
- {
- char tag[4]; // HDIG
- HTIMER backgroundtimer; // Background timer handle
- S32 quiet; // # of consecutive quiet sample periods
- S32 n_active_samples; // # of samples being processed
- S32 master_volume; // Master sample volume 0-127
- S32 DMA_rate; // Hardware sample rate
- S32 hw_format; // DIG_F code in use
- U32 hw_mode_flags; // DIG_PCM_ flags for mode in use
- S32 channels_per_sample; // # of channels per sample (1 or 2)
- S32 bytes_per_channel; // # of bytes per channel (1 or 2)
- S32 channels_per_buffer; // # of channels per half-buffer
- S32 samples_per_buffer; // # of samples per half-buffer
- S32 playing; // Playback active if non-zero
- HSAMPLE samples; // Pointer to list of SAMPLEs
- S32 n_samples; // # of SAMPLEs
- S32 build_size; // # of bytes in build buffer
- S32 FAR *build_buffer; // Build buffer (4 * samples_per_buffer)
- S32 system_data[8]; // Miscellaneous system data
- S32 buffer_size; // Size of each output buffer
- #ifdef IS_WINDOWS
- //
- // waveOut-specific interface data
- //
- HWAVEOUT hWaveOut; // Wave output driver
- U32 reset_works; // TRUE if OK to do waveOutReset
- U32 request_reset; // If nonzero, do waveOutReset ASAP
- LPWAVEHDR first; // Pointer to first WAVEHDR in chain
- S32 n_buffers; // # of output WAVEHDRs in chain
- LPWAVEHDR volatile FAR *return_list; // Circular list of returned WAVEHDRs
- S32 volatile return_head; // Head of WAVEHDR list (insertion point)
- S32 volatile return_tail; // Tail of WAVEHDR list (retrieval point)
- U32 deviceid; // id from waveout open
- PCMWAVEFORMAT wformat; // format from waveout open
- //
- // DirectSound-specific interface data
- //
- U32 guid; // The guid id of the ds driver
- AILLPDIRECTSOUND pDS; // DirectSound output driver (don't
- // use with Smacker directly anymore!)
- S32 emulated_ds; // is ds emulated or not?
- AILLPDIRECTSOUNDBUFFER lppdsb; // primary buffer or null
- U32 dsHwnd; // HWND used with DirectSound
- AILLPDIRECTSOUNDBUFFER FAR * lpbufflist; // List of pointers to secondary buffers
- HSAMPLE FAR *samp_list; // HSAMPLE associated with each buffer
- S32 FAR *sec_format; // DIG_F_ format for secondary buffer
- S32 max_buffs; // Max. allowable # of secondary buffers
- //
- // Misc. data
- //
- S32 released; // has the sound manager been released?
- U32 foreground_timer; // Foreground timer handle
- HDIGDRIVER next; // Pointer to next HDIGDRIVER in use
- S32 callingCT; // Calling EXE's task number (16 bit only)
- S32 callingDS; // Calling EXE's DS (used in 16 bit only)
- //
- // Vars for waveOut emulation
- //
- S32 DS_initialized;
- AILLPDIRECTSOUNDBUFFER DS_sec_buff; // Secondary buffer (or NULL if none)
- AILLPDIRECTSOUNDBUFFER DS_out_buff; // Output buffer (may be sec or prim)
- S32 DS_buffer_size; // Size of entire output buffer
- S32 DS_frag_cnt; // Total fragment count and size, and
- S32 DS_frag_size; // last fragment occupied by play cursor
- S32 DS_last_frag;
- S32 DS_last_write;
- S32 DS_last_timer;
- S32 DS_skip_time;
- S32 DS_use_default_format; // 1 to force use of default DS primary buffer format
- #else
- // must be first in the DOS section
- void *DMA[2]; // Protected-mode pointers to half-buffers
- // (note that DMA[0] may != DMA_buf)
- REALFAR DMA_seg; // Seg:off pointer to DMA buffers (off=0)
- U32 DMA_sel; // Selector for DMA buffers (off=0)
- void *DMA_buf; // Protected-mode pointer to DMA buffers
- S16 *buffer_flag; // Protected-mode pointer to buffer flag
- S32 last_buffer; // Last active buffer flag value in driver
- AIL_DRIVER *drvr; // Base driver descriptor
- DIG_DDT *DDT; // Protected-mode pointer to DDT
- DIG_DST *DST; // Protected-mode pointer to DST
- #endif
- S32 use_MMX; // Use MMX with this driver if TRUE
- void FAR *decode_buffer; // Buffer used by optional ASI pipeline decoder
- S32 decode_buffer_size; // # of bytes in decode buffer
- U32 us_count;
- U32 ms_count;
- U32 last_ms_polled;
- U32 last_percent;
- //
- // Digital driver pipeline stages
- //
- DPINFO pipeline[N_DIGDRV_STAGES];
- //
- // Reverb buffer
- //
- S32 FAR *reverb_buffer;
- S32 reverb_buffer_size;
- S32 reverb_buffer_position;
- }
- DIG_DRIVER;
- typedef struct // MIDI status log structure
- {
- S32 program [NUM_CHANS]; // Program Change
- S32 pitch_l [NUM_CHANS]; // Pitch Bend LSB
- S32 pitch_h [NUM_CHANS]; // Pitch Bend MSB
- S32 c_lock [NUM_CHANS]; // Channel Lock
- S32 c_prot [NUM_CHANS]; // Channel Lock Protection
- S32 c_mute [NUM_CHANS]; // Channel Mute
- S32 c_v_prot [NUM_CHANS]; // Voice Protection
- S32 bank [NUM_CHANS]; // Patch Bank Select
- S32 gm_bank_l [NUM_CHANS]; // GM Bank Select
- S32 gm_bank_m [NUM_CHANS]; // GM Bank Select
- S32 indirect [NUM_CHANS]; // ICA indirect controller value
- S32 callback [NUM_CHANS]; // Callback Trigger
- S32 mod [NUM_CHANS]; // Modulation
- S32 vol [NUM_CHANS]; // Volume
- S32 pan [NUM_CHANS]; // Panpot
- S32 exp [NUM_CHANS]; // Expression
- S32 sus [NUM_CHANS]; // Sustain
- S32 reverb [NUM_CHANS]; // Reverb
- S32 chorus [NUM_CHANS]; // Chorus
- S32 bend_range[NUM_CHANS]; // Bender Range (data MSB, RPN 0 assumed)
- S32 RPN_L [NUM_CHANS]; // RPN # LSB
- S32 RPN_M [NUM_CHANS]; // RPN # MSB
- }
- CTRL_LOG;
- typedef struct _SEQUENCE // XMIDI sequence state table
- {
- char tag[4]; // HSEQ
- HMDIDRIVER driver; // Driver for playback
- U32 status; // SEQ_ flags
- void FAR *TIMB; // XMIDI IFF chunk pointers
- void FAR *RBRN;
- void FAR *EVNT;
- U8 FAR *EVNT_ptr; // Current event pointer
- U8 FAR *ICA; // Indirect Controller Array
- AILPREFIXCB prefix_callback; // XMIDI Callback Prefix handler
- AILTRIGGERCB trigger_callback; // XMIDI Callback Trigger handler
- AILBEATCB beat_callback; // XMIDI beat/bar change handler
- AILSEQUENCECB EOS; // End-of-sequence callback function
- S32 loop_count; // 0=one-shot, -1=indefinite, ...
- S32 interval_count; // # of intervals until next event
- S32 interval_num; // # of intervals since start
- S32 volume; // Sequence volume 0-127
- S32 volume_target; // Target sequence volume 0-127
- S32 volume_accum; // Accumulated volume period
- S32 volume_period; // Period for volume stepping
- S32 tempo_percent; // Relative tempo percentage 0-100
- S32 tempo_target; // Target tempo 0-100
- S32 tempo_accum; // Accumulated tempo period
- S32 tempo_period; // Period for tempo stepping
- S32 tempo_error; // Error counter for tempo DDA
- S32 beat_count; // Sequence playback position
- S32 measure_count;
- S32 time_numerator; // Sequence timing data
- S32 time_fraction;
- S32 beat_fraction;
- S32 time_per_beat;
- void FAR *FOR_ptrs [FOR_NEST]; // Loop stack
- S32 FOR_loop_count [FOR_NEST];
- S32 chan_map [NUM_CHANS]; // Physical channel map for sequence
- CTRL_LOG shadow; // Controller values for sequence
- S32 note_count; // # of notes "on"
- S32 note_chan [MAX_NOTES]; // Channel for queued note (-1=free)
- S32 note_num [MAX_NOTES]; // Note # for queued note
- S32 note_time [MAX_NOTES]; // Remaining duration in intervals
- S32 user_data [8]; // Miscellaneous user data
- S32 system_data[8]; // Miscellaneous system data
- #ifdef IS_WINDOWS
- S32 PREFIX_IsWin32s; // Is this a Win32s callback
- S32 TRIGGER_IsWin32s; // Is this a Win32s callback
- S32 BEAT_IsWin32s; // Is this a Win32s callback
- S32 EOS_IsWin32s; // Is this a Win32s callback
- #endif
- } SEQUENCE;
- typedef struct _MDI_DRIVER // Handle to XMIDI driver
- {
- char tag[4]; // HMDI
- HTIMER timer; // XMIDI quantization timer
- S32 interval_time; // XMIDI quantization timer interval in uS
- S32 disable; // > 0 to disable XMIDI service
- HSEQUENCE sequences; // Pointer to list of SEQUENCEs
- S32 n_sequences; // # of SEQUENCEs
- S32 lock [NUM_CHANS]; // 1 if locked, 2 if protected, else 0
- HSEQUENCE locker[NUM_CHANS]; // HSEQUENCE which locked channel
- HSEQUENCE owner [NUM_CHANS]; // HSEQUENCE which owned locked channel
- HSEQUENCE user [NUM_CHANS]; // Last sequence to use channel
- S32 state [NUM_CHANS]; // Lock state prior to being locked
- S32 notes [NUM_CHANS]; // # of active notes in channel
- AILEVENTCB event_trap; // MIDI event trap callback function
- AILTIMBRECB timbre_trap; // Timbre request callback function
- S32 master_volume; // Master XMIDI note volume 0-127
- S32 system_data[8]; // Miscellaneous system data
- #ifdef IS_WINDOWS
- S32 EVENT_IsWin32s; // Is this a Win32s callback
- S32 TIMBRE_IsWin32s; // Is this a Win32s callback
- MIDIHDR FAR *mhdr; // SysEx header
- U8 FAR *sysdata; // SysEx buffer
- HMDIDRIVER next; // Pointer to next HMDIDRIVER in use
- S32 callingCT; // Calling EXE's task number (16 bit only)
- S32 callingDS; // Calling EXE's DS (used in 16 bit only)
- HMIDIOUT hMidiOut; // MIDI output driver
- U32 deviceid; // ID of the MIDI device
- S32 released; // has the hmidiout handle been released
- #else
- S32 message_count; // MIDI message count
- S32 offset; // MIDI buffer offset
- AIL_DRIVER *drvr; // Base driver descriptor
- MDI_DDT *DDT; // Protected-mode pointer to DDT
- MDI_DST *DST; // Protected-mode pointer to DST
- #endif
- }
- MDI_DRIVER;
- typedef struct // XMIDI TIMB IFF chunk
- {
- S8 name[4];
- U8 msb;
- U8 lsb;
- U8 lsb2;
- U8 lsb3;
- U16 n_entries;
- U16 timbre[1];
- }
- TIMB_chunk;
- typedef struct // XMIDI RBRN IFF entry
- {
- S16 bnum;
- U32 offset;
- }
- RBRN_entry;
- typedef struct // Wave library entry
- {
- S32 bank; // XMIDI bank, MIDI patch for sample
- S32 patch;
- S32 root_key; // Root MIDI note # for sample (or -1)
- U32 file_offset; // Offset of wave data from start-of-file
- U32 size; // Size of wave sample in bytes
- S32 format; // DIG_F format (8/16 bits, mono/stereo)
- U32 flags; // DIG_PCM_SIGN / DIG_PCM_ORDER (stereo)
- S32 playback_rate; // Playback rate in hertz
- }
- WAVE_ENTRY;
- typedef struct // Virtual "wave synthesizer" descriptor
- {
- HMDIDRIVER mdi; // MIDI driver for use with synthesizer
- HDIGDRIVER dig; // Digital driver for use with synthesizer
- WAVE_ENTRY FAR *library; // Pointer to wave library
- AILEVENTCB prev_event_fn; // Previous MIDI event trap function
- AILTIMBRECB prev_timb_fn; // Previous timbre request trap function
- CTRL_LOG controls; // MIDI controller states
- WAVE_ENTRY FAR *wave [NUM_CHANS];// Pointer to WAVE_ENTRY for each channel
- HSAMPLE S [MAX_W_VOICES]; // List of HSAMPLE voices
- S32 n_voices; // Actual # of voices allocated to synth
- S32 chan [MAX_W_VOICES]; // MIDI channel for each voice, or -1
- S32 note [MAX_W_VOICES]; // MIDI note number for voice
- S32 root [MAX_W_VOICES]; // MIDI root note for voice
- S32 rate [MAX_W_VOICES]; // Playback rate for voice
- S32 vel [MAX_W_VOICES]; // MIDI note velocity for voice
- U32 time [MAX_W_VOICES]; // Timestamp for voice
- U32 event; // Event counter for LRU timestamps
- }
- WAVE_SYNTH;
- typedef WAVE_SYNTH FAR * HWAVESYNTH;// Handle to virtual wave synthesizer
- //
- // Handle to thread which called AIL_startup()
- //
- // This thread is suspended by MSS callback threads, to simulate DOS-style
- // interrupt handler behavior
- //
- #ifdef IS_WIN32
- extern HANDLE hAppThread;
- #endif
- //
- // Background flag for timers
- //
- extern volatile S32 AIL_bkgnd_flag;
- //
- // Global preference array
- //
- extern S32 AIL_preference [N_PREFS];
- //
- // DIG_DRIVER list
- //
- extern HDIGDRIVER DIG_first;
- //
- // MDI_DRIVER list
- //
- extern HMDIDRIVER MDI_first;
- //
- // Miscellaneous system services
- //
- #define FILE_READ_WITH_SIZE ((void FAR*)(S32)-1)
- #ifndef NO_OLD_SYS_FUNCTIONS
- #define MEM_alloc_lock AIL_mem_alloc_lock
- #define MEM_free_lock AIL_mem_free_lock
- #define FILE_error AIL_file_error
- #define FILE_size AIL_file_size
- #define FILE_read AIL_file_read
- #define FILE_write AIL_file_write
- #ifdef IS_DOS
- #define MEM_alloc AIL_mem_alloc
- #define MEM_free AIL_mem_free
- #define MEM_use_malloc AIL_mem_use_malloc
- #define MEM_use_free AIL_mem_use_free
- #define MEM_alloc_DOS AIL_mem_alloc_DOS
- #define MEM_free_DOS AIL_mem_free_DOS
- #define VMM_lock_range AIL_vmm_lock_range
- #define VMM_unlock_range AIL_vmm_unlock_range
- #define VMM_lock AIL_vmm_lock
- #define VMM_unlock AIL_vmm_unlock
- #endif
- #endif
- extern S32 AILCALLBACK DP_ASI_DECODER_callback(U32 user,
- void FAR *dest,
- S32 bytes_requested,
- S32 offset);
- DXDEC void FAR * AILCALL AIL_mem_alloc_lock(U32 size);
- DXDEC void AILCALL AIL_mem_free_lock (void FAR *ptr);
- DXDEC S32 AILCALL AIL_file_error (void);
- DXDEC S32 AILCALL AIL_file_size (char FAR *filename);
- DXDEC void FAR * AILCALL AIL_file_read (char FAR *filename,
- void FAR *dest);
- DXDEC S32 AILCALL AIL_file_write (char FAR *filename,
- void FAR *buf,
- U32 len);
- DXDEC S32 AILCALL AIL_WAV_file_write
- (char FAR *filename,
- void FAR *buf,
- U32 len,
- S32 rate,
- S32 format);
- DXDEC S32 AILCALL AIL_file_append (char FAR*filename,
- void FAR*buf, U32 len);
- #ifdef IS_DOS
- extern void * AILCALLBACK (*AIL_mem_alloc) (U32);
- extern void AILCALLBACK (*AIL_mem_free) (void *);
- void * cdecl AIL_mem_use_malloc(void * AILCALLBACK (*fn)(U32));
- void * cdecl AIL_mem_use_free (void AILCALLBACK (*fn)(void *));
- //
- // Other memory-management functions
- //
- DXDEC S32 AILCALL AIL_mem_alloc_DOS (U32 n_paras,
- void **protected_ptr,
- U32 *segment_far_ptr,
- U32 *selector);
- DXDEC void AILCALL AIL_mem_free_DOS (void *protected_ptr,
- U32 segment_far_ptr,
- U32 selector);
- DXDEC S32 AILCALL AIL_vmm_lock_range (void *p1, void *p2);
- DXDEC S32 AILCALL AIL_vmm_unlock_range (void *p1, void *p2);
- DXDEC S32 AILCALL AIL_vmm_lock (void *start, U32 size);
- DXDEC S32 AILCALL AIL_vmm_unlock (void *start, U32 size);
- DXDEC U32 AILCALL AIL_sel_base (U32 sel);
- DXDEC void AILCALL AIL_sel_set_limit (U32 sel,
- U32 limit);
- //
- // Last IO_PARMS structure used to attempt device detection
- //
- extern IO_PARMS AIL_last_IO_attempt;
- //
- // Low-level support services
- //
- DXDEC REALFAR AILCALL AIL_get_real_vect (U32 vectnum);
- DXDEC void AILCALL AIL_set_real_vect (U32 vectnum,
- REALFAR real_ptr);
- DXDEC void AILCALL AIL_set_USE16_ISR (S32 IRQ,
- REALFAR real_base,
- U32 ISR_offset);
- DXDEC void AILCALL AIL_restore_USE16_ISR (S32 IRQ);
- DXDEC U32 AILCALL AIL_disable_interrupts (void);
- DXDEC void AILCALL AIL_restore_interrupts (U32 FD_register);
- DXDEC void AILCALL AIL_switch_stack (void *stack,
- U32 size,
- U32 *SS,
- void **ESP,
- void **EBP);
- DXDEC void AILCALL AIL_restore_stack (U32 SS,
- void *ESP,
- void *EBP);
- DXDEC S32 AILCALL AIL_call_driver (AIL_DRIVER *drvr,
- S32 fn,
- VDI_CALL *in,
- VDI_CALL *out);
- DXDEC S32 AILCALL AIL_read_INI (AIL_INI *INI,
- char *filename);
- DXDEC U32 AILCALL AIL_interrupt_divisor (void);
- #endif
- #ifdef __WATCOMC__
- void MSSBreakPoint();
- #pragma aux MSSBreakPoint = "int 3";
- #else
- #define MSSBreakPoint() __asm {int 3}
- #endif
- //
- // High-level support services
- //
- #ifdef IS_DOS
- #ifdef IS_WATCOM
- #if !defined(max) // Watcom stdlib.h doesn't define these for C++
- #define max(a,b) (((a) > (b)) ? (a) : (b))
- #endif
- #if !defined(min)
- #define min(a,b) (((a) < (b)) ? (a) : (b))
- #endif
- #endif
- #ifdef __SW_3R
- extern S32 AILCALL AIL_startup_reg (void);
- #define AIL_startup AIL_startup_reg
- #else
- extern S32 AILCALL AIL_startup_stack (void);
- #define AIL_startup AIL_startup_stack
- #endif
- #define AIL_quick_startup(ud,um,opr,opb,ops) AIL_quick_startup_with_start(&AIL_startup,ud,um,opr,opb,ops)
- extern S8 AIL_driver_directory [256];
- DXDEC char FAR* AILCALL AIL_set_driver_directory (char FAR*dir);
- #define AIL_get_preference(number) (AIL_preference[number])
- #else
- DXDEC S32 AILCALL AIL_startup (void);
- DXDEC S32 AILCALL AIL_get_preference (U32 number);
- #endif
- DXDEC void AILCALL AIL_shutdown (void);
- DXDEC S32 AILCALL AIL_set_preference (U32 number,
- S32 value);
- DXDEC char FAR *AILCALL AIL_last_error (void);
- DXDEC void AILCALL AIL_set_error (char FAR* error_msg);
- //
- // Low-level support services
- //
- DXDEC void __cdecl AIL_debug_printf (C8 FAR *fmt, ...);
- DXDEC U32 AILCALL AIL_MMX_available (void);
- DXDEC void AILCALL AIL_lock (void);
- DXDEC void AILCALL AIL_unlock (void);
- DXDEC void AILCALL AIL_delay (S32 intervals);
- DXDEC S32 AILCALL AIL_background (void);
- //
- // Process services
- //
- DXDEC HTIMER AILCALL AIL_register_timer (AILTIMERCB fn);
- DXDEC U32 AILCALL AIL_set_timer_user (HTIMER timer,
- U32 user);
- DXDEC void AILCALL AIL_set_timer_period (HTIMER timer,
- U32 microseconds);
- DXDEC void AILCALL AIL_set_timer_frequency (HTIMER timer,
- U32 hertz);
- DXDEC void AILCALL AIL_set_timer_divisor (HTIMER timer,
- U32 PIT_divisor);
- DXDEC void AILCALL AIL_start_timer (HTIMER timer);
- DXDEC void AILCALL AIL_start_all_timers (void);
- DXDEC void AILCALL AIL_stop_timer (HTIMER timer);
- DXDEC void AILCALL AIL_stop_all_timers (void);
- DXDEC void AILCALL AIL_release_timer_handle (HTIMER timer);
- DXDEC void AILCALL AIL_release_all_timers (void);
- #ifdef IS_WIN32
- DXDEC U32 AILCALL AIL_get_timer_highest_delay (void);
- DXDEC HWND AILCALL AIL_HWND (void);
- #endif
- //
- // high-level digital services
- //
- #ifdef IS_WINDOWS
- #define AIL_DLL_version(str,len) \
- { \
- HINSTANCE l=LoadLibrary(MSSDLLNAME); \
- if ((U32)l<=32) \
- *(str)=0; \
- else { \
- LoadString(l,1,str,len); \
- FreeLibrary(l); \
- } \
- }
- DXDEC S32 AILCALL AIL_waveOutOpen (HDIGDRIVER FAR *drvr,
- LPHWAVEOUT FAR *lphWaveOut,
- S32 wDeviceID,
- LPWAVEFORMAT lpFormat);
- DXDEC void AILCALL AIL_waveOutClose (HDIGDRIVER drvr);
- DXDEC S32 AILCALL AIL_digital_handle_release(HDIGDRIVER drvr);
- DXDEC S32 AILCALL AIL_digital_handle_reacquire
- (HDIGDRIVER drvr);
- DXDEC void AILCALL AIL_serve(void);
- #else
- //
- // DOS installation services
- //
- DXDEC IO_PARMS * AILCALL AIL_get_IO_environment (AIL_DRIVER *drvr);
- DXDEC AIL_DRIVER* AILCALL AIL_install_driver (U8 *driver_image,
- U32 n_bytes);
- DXDEC void AILCALL AIL_uninstall_driver (AIL_DRIVER *drvr);
- DXDEC S32 AILCALL AIL_install_DIG_INI (HDIGDRIVER *dig);
- DXDEC HDIGDRIVER AILCALL AIL_install_DIG_driver_file
- (char *filename,
- IO_PARMS *IO);
- DXDEC void AILCALL AIL_uninstall_DIG_driver (HDIGDRIVER dig);
- DXDEC HDIGDRIVER AILCALL AIL_install_DIG_driver_image
- (void *driver_image,
- U32 size,
- IO_PARMS *IO);
- #endif
- DXDEC S32 AILCALL AIL_digital_CPU_percent(HDIGDRIVER dig);
- DXDEC HSAMPLE AILCALL AIL_allocate_sample_handle
- (HDIGDRIVER dig);
- DXDEC HSAMPLE AILCALL AIL_allocate_file_sample (HDIGDRIVER dig,
- void FAR *file_image,
- S32 block);
- DXDEC void AILCALL AIL_release_sample_handle (HSAMPLE S);
- DXDEC void AILCALL AIL_init_sample (HSAMPLE S);
- DXDEC S32 AILCALL AIL_set_sample_file (HSAMPLE S,
- void FAR *file_image,
- S32 block);
- DXDEC S32 AILCALL AIL_set_named_sample_file (HSAMPLE S,
- C8 FAR *file_type_suffix,
- void FAR *file_image,
- S32 file_size,
- S32 block);
- DXDEC HPROVIDER AILCALL AIL_set_sample_processor (HSAMPLE S,
- SAMPLESTAGE pipeline_stage,
- HPROVIDER provider);
- DXDEC HPROVIDER AILCALL AIL_set_digital_driver_processor
- (HDIGDRIVER dig,
- DIGDRVSTAGE pipeline_stage,
- HPROVIDER provider);
- DXDEC void AILCALL AIL_set_sample_adpcm_block_size
- (HSAMPLE S,
- U32 blocksize);
- DXDEC void AILCALL AIL_set_sample_address (HSAMPLE S,
- void FAR *start,
- U32 len);
- DXDEC void AILCALL AIL_set_sample_type (HSAMPLE S,
- S32 format,
- U32 flags);
- DXDEC void AILCALL AIL_start_sample (HSAMPLE S);
- DXDEC void AILCALL AIL_stop_sample (HSAMPLE S);
- DXDEC void AILCALL AIL_resume_sample (HSAMPLE S);
- DXDEC void AILCALL AIL_end_sample (HSAMPLE S);
- DXDEC void AILCALL AIL_set_sample_playback_rate
- (HSAMPLE S,
- S32 playback_rate);
- DXDEC void AILCALL AIL_set_sample_volume (HSAMPLE S,
- S32 volume);
- DXDEC void AILCALL AIL_set_sample_pan (HSAMPLE S,
- S32 pan);
- DXDEC void AILCALL AIL_set_sample_loop_count (HSAMPLE S,
- S32 loop_count);
- DXDEC void AILCALL AIL_set_sample_loop_block (HSAMPLE S,
- S32 loop_start_offset,
- S32 loop_end_offset);
- DXDEC U32 AILCALL AIL_sample_status (HSAMPLE S);
- DXDEC S32 AILCALL AIL_sample_playback_rate (HSAMPLE S);
- DXDEC S32 AILCALL AIL_sample_volume (HSAMPLE S);
- DXDEC S32 AILCALL AIL_sample_pan (HSAMPLE S);
- DXDEC S32 AILCALL AIL_sample_loop_count (HSAMPLE S);
- DXDEC void AILCALL AIL_set_digital_master_volume
- (HDIGDRIVER dig,
- S32 master_volume);
- DXDEC S32 AILCALL AIL_digital_master_volume (HDIGDRIVER dig);
- DXDEC void AILCALL AIL_set_sample_reverb(HSAMPLE S,
- F32 reverb_level,
- F32 reverb_reflect_time,
- F32 reverb_decay_time);
- DXDEC void AILCALL AIL_sample_reverb (HSAMPLE S,
- F32 FAR *reverb_level,
- F32 FAR *reverb_reflect_time,
- F32 FAR *reverb_decay_time);
- //
- // low-level digital services
- //
- DXDEC S32 AILCALL AIL_minimum_sample_buffer_size(HDIGDRIVER dig,
- S32 playback_rate,
- S32 format);
- DXDEC S32 AILCALL AIL_sample_buffer_ready (HSAMPLE S);
- DXDEC void AILCALL AIL_load_sample_buffer (HSAMPLE S,
- U32 buff_num,
- void FAR *buffer,
- U32 len);
- DXDEC S32 AILCALL AIL_sample_buffer_info (HSAMPLE S, //)
- U32 FAR *pos0,
- U32 FAR *len0,
- U32 FAR *pos1,
- U32 FAR *len1);
- DXDEC U32 AILCALL AIL_sample_granularity (HSAMPLE S);
- DXDEC void AILCALL AIL_set_sample_position (HSAMPLE S,
- U32 pos);
- DXDEC U32 AILCALL AIL_sample_position (HSAMPLE S);
- DXDEC AILSAMPLECB AILCALL AIL_register_SOB_callback
- (HSAMPLE S,
- AILSAMPLECB SOB);
- DXDEC AILSAMPLECB AILCALL AIL_register_EOB_callback
- (HSAMPLE S,
- AILSAMPLECB EOB);
- DXDEC AILSAMPLECB AILCALL AIL_register_EOS_callback
- (HSAMPLE S,
- AILSAMPLECB EOS);
- DXDEC AILSAMPLECB AILCALL AIL_register_EOF_callback
- (HSAMPLE S,
- AILSAMPLECB EOFILE);
- DXDEC void AILCALL AIL_set_sample_user_data (HSAMPLE S,
- U32 index,
- S32 value);
- DXDEC S32 AILCALL AIL_sample_user_data (HSAMPLE S,
- U32 index);
- DXDEC S32 AILCALL AIL_active_sample_count (HDIGDRIVER dig);
- DXDEC void AILCALL AIL_digital_configuration (HDIGDRIVER dig,
- S32 FAR *rate,
- S32 FAR *format,
- char FAR *string);
- #ifdef IS_WIN32
- DXDEC S32 AILCALL AIL_set_direct_buffer_control (HSAMPLE S,
- U32 command);
- DXDEC void AILCALL AIL_get_DirectSound_info (HSAMPLE S,
- AILLPDIRECTSOUND *lplpDS,
- AILLPDIRECTSOUNDBUFFER *lplpDSB);
- DXDEC S32 AILCALL AIL_set_DirectSound_HWND(HDIGDRIVER dig, HWND wnd);
- #endif
- DXDEC void AILCALL AIL_set_sample_ms_position (HSAMPLE S, //)
- S32 milliseconds);
- DXDEC void AILCALL AIL_sample_ms_position (HSAMPLE S, //)
- S32 FAR * total_milliseconds,
- S32 FAR * current_milliseconds);
- //
- // Digital input services
- //
- #ifdef IS_WINDOWS
- DXDEC HDIGINPUT AILCALL AIL_input_open (AILINPUTINFO FAR *info,
- U32 constraints,
- U32 callback_user_value);
- DXDEC void AILCALL AIL_input_close (HDIGINPUT dig);
- DXDEC AILINPUTINFO FAR *
- AILCALL AIL_input_info (HDIGINPUT dig);
- DXDEC S32 AILCALL AIL_set_input_state (HDIGINPUT dig,
- S32 enable);
- #endif
- //
- // High-level XMIDI services
- //
- #ifdef IS_WINDOWS
- DXDEC S32 AILCALL AIL_midiOutOpen(HMDIDRIVER FAR *drvr,
- LPHMIDIOUT FAR *lphMidiOut,
- S32 dwDeviceID);
- DXDEC void AILCALL AIL_midiOutClose (HMDIDRIVER mdi);
- DXDEC S32 AILCALL AIL_MIDI_handle_release
- (HMDIDRIVER mdi);
- DXDEC S32 AILCALL AIL_MIDI_handle_reacquire
- (HMDIDRIVER mdi);
- #else
- DXDEC S32 AILCALL AIL_install_MDI_INI (HMDIDRIVER *mdi);
- DXDEC HMDIDRIVER AILCALL AIL_install_MDI_driver_file
- (char *filename,
- IO_PARMS *IO);
- DXDEC void AILCALL AIL_uninstall_MDI_driver (HMDIDRIVER mdi);
- DXDEC HMDIDRIVER AILCALL AIL_install_MDI_driver_image
- (void *driver_image,
- U32 size,
- IO_PARMS *IO);
- DXDEC S32 AILCALL AIL_MDI_driver_type (HMDIDRIVER mdi);
- DXDEC void AILCALL AIL_set_GTL_filename_prefix (char *prefix);
- DXDEC S32 AILCALL AIL_timbre_status (HMDIDRIVER mdi,
- S32 bank,
- S32 patch);
- DXDEC S32 AILCALL AIL_install_timbre (HMDIDRIVER mdi,
- S32 bank,
- S32 patch);
- DXDEC void AILCALL AIL_protect_timbre (HMDIDRIVER mdi,
- S32 bank,
- S32 patch);
- DXDEC void AILCALL AIL_unprotect_timbre (HMDIDRIVER mdi,
- S32 bank,
- S32 patch);
- #endif
- DXDEC HSEQUENCE AILCALL AIL_allocate_sequence_handle
- (HMDIDRIVER mdi);
- DXDEC void AILCALL AIL_release_sequence_handle
- (HSEQUENCE S);
- DXDEC S32 AILCALL AIL_init_sequence (HSEQUENCE S,
- void FAR *start,
- S32 sequence_num);
- DXDEC void AILCALL AIL_start_sequence (HSEQUENCE S);
- DXDEC void AILCALL AIL_stop_sequence (HSEQUENCE S);
- DXDEC void AILCALL AIL_resume_sequence (HSEQUENCE S);
- DXDEC void AILCALL AIL_end_sequence (HSEQUENCE S);
- DXDEC void AILCALL AIL_set_sequence_tempo (HSEQUENCE S,
- S32 tempo,
- S32 milliseconds);
- DXDEC void AILCALL AIL_set_sequence_volume (HSEQUENCE S,
- S32 volume,
- S32 milliseconds);
- DXDEC void AILCALL AIL_set_sequence_loop_count
- (HSEQUENCE S,
- S32 loop_count);
- DXDEC U32 AILCALL AIL_sequence_status (HSEQUENCE S);
- DXDEC S32 AILCALL AIL_sequence_tempo (HSEQUENCE S);
- DXDEC S32 AILCALL AIL_sequence_volume (HSEQUENCE S);
- DXDEC S32 AILCALL AIL_sequence_loop_count (HSEQUENCE S);
- DXDEC void AILCALL AIL_set_XMIDI_master_volume
- (HMDIDRIVER mdi,
- S32 master_volume);
- DXDEC S32 AILCALL AIL_XMIDI_master_volume (HMDIDRIVER mdi);
- //
- // Low-level XMIDI services
- //
- DXDEC S32 AILCALL AIL_active_sequence_count (HMDIDRIVER mdi);
- DXDEC S32 AILCALL AIL_controller_value (HSEQUENCE S,
- S32 channel,
- S32 controller_num);
- DXDEC S32 AILCALL AIL_channel_notes (HSEQUENCE S,
- S32 channel);
- DXDEC void AILCALL AIL_sequence_position (HSEQUENCE S,
- S32 FAR *beat,
- S32 FAR *measure);
- DXDEC void AILCALL AIL_branch_index (HSEQUENCE S,
- U32 marker);
- DXDEC AILPREFIXCB AILCALL AIL_register_prefix_callback
- (HSEQUENCE S,
- AILPREFIXCB callback);
- DXDEC AILTRIGGERCB AILCALL AIL_register_trigger_callback
- (HSEQUENCE S,
- AILTRIGGERCB callback);
- DXDEC AILSEQUENCECB AILCALL AIL_register_sequence_callback
- (HSEQUENCE S,
- AILSEQUENCECB callback);
- DXDEC AILBEATCB AILCALL AIL_register_beat_callback (HSEQUENCE S,
- AILBEATCB callback);
- DXDEC AILEVENTCB AILCALL AIL_register_event_callback (HMDIDRIVER mdi,
- AILEVENTCB callback);
- DXDEC AILTIMBRECB AILCALL AIL_register_timbre_callback
- (HMDIDRIVER mdi,
- AILTIMBRECB callback);
- DXDEC void AILCALL AIL_set_sequence_user_data (HSEQUENCE S,
- U32 index,
- S32 value);
- DXDEC S32 AILCALL AIL_sequence_user_data (HSEQUENCE S,
- U32 index);
- DXDEC void AILCALL AIL_register_ICA_array (HSEQUENCE S,
- U8 FAR *array);
- DXDEC S32 AILCALL AIL_lock_channel (HMDIDRIVER mdi);
- DXDEC void AILCALL AIL_release_channel (HMDIDRIVER mdi,
- S32 channel);
- DXDEC void AILCALL AIL_map_sequence_channel (HSEQUENCE S,
- S32 seq_channel,
- S32 new_channel);
- DXDEC S32 AILCALL AIL_true_sequence_channel (HSEQUENCE S,
- S32 seq_channel);
- DXDEC void AILCALL AIL_send_channel_voice_message
- (HMDIDRIVER mdi,
- HSEQUENCE S,
- S32 status,
- S32 data_1,
- S32 data_2);
- DXDEC void AILCALL AIL_send_sysex_message (HMDIDRIVER mdi,
- void FAR *buffer);
- DXDEC HWAVESYNTH
- AILCALL AIL_create_wave_synthesizer (HDIGDRIVER dig,
- HMDIDRIVER mdi,
- void FAR *wave_lib,
- S32 polyphony);
- DXDEC void AILCALL AIL_destroy_wave_synthesizer (HWAVESYNTH W);
- DXDEC void AILCALL AIL_set_sequence_ms_position (HSEQUENCE S, //)
- S32 milliseconds);
- DXDEC void AILCALL AIL_sequence_ms_position(HSEQUENCE S, //)
- S32 FAR *total_milliseconds,
- S32 FAR *current_milliseconds);
- //
- // red book functions
- //
- #ifdef IS_DOS
- typedef struct _REDBOOKTRACKINFO {
- U32 tracks;
- U32 trackstarts[100];
- } REDBOOKTRACKINFO;
- #endif
- typedef struct _REDBOOK {
- U32 DeviceID;
- U32 paused;
- U32 pausedsec;
- U32 lastendsec;
- #ifdef IS_DOS
- U32 readcontents;
- REDBOOKTRACKINFO info;
- #endif
- } REDBOOK;
- typedef struct _REDBOOK FAR* HREDBOOK;
- #define REDBOOK_ERROR 0
- #define REDBOOK_PLAYING 1
- #define REDBOOK_PAUSED 2
- #define REDBOOK_STOPPED 3
- DXDEC HREDBOOK AILCALL AIL_redbook_open(U32 which);
- DXDEC HREDBOOK AILCALL AIL_redbook_open_drive(S32 drive);
- DXDEC void AILCALL AIL_redbook_close(HREDBOOK hand);
- DXDEC void AILCALL AIL_redbook_eject(HREDBOOK hand);
- DXDEC void AILCALL AIL_redbook_retract(HREDBOOK hand);
- DXDEC U32 AILCALL AIL_redbook_status(HREDBOOK hand);
- DXDEC U32 AILCALL AIL_redbook_tracks(HREDBOOK hand);
- DXDEC U32 AILCALL AIL_redbook_track(HREDBOOK hand);
- DXDEC void AILCALL AIL_redbook_track_info(HREDBOOK hand,U32 tracknum,
- U32 FAR* startmsec,U32 FAR* endmsec);
- DXDEC U32 AILCALL AIL_redbook_id(HREDBOOK hand);
- DXDEC U32 AILCALL AIL_redbook_position(HREDBOOK hand);
- DXDEC U32 AILCALL AIL_redbook_play(HREDBOOK hand,U32 startmsec, U32 endmsec);
- DXDEC U32 AILCALL AIL_redbook_stop(HREDBOOK hand);
- DXDEC U32 AILCALL AIL_redbook_pause(HREDBOOK hand);
- DXDEC U32 AILCALL AIL_redbook_resume(HREDBOOK hand);
- DXDEC S32 AILCALL AIL_redbook_volume(HREDBOOK hand);
- DXDEC S32 AILCALL AIL_redbook_set_volume(HREDBOOK hand, S32 volume);
- #ifdef IS_WIN16
- #define AIL_ms_count timeGetTime
- DXDEC U32 AILCALL AIL_us_count(void);
- #else
- DXDEC U32 AILCALL AIL_ms_count(void);
- DXDEC U32 AILCALL AIL_us_count(void);
- #endif
- typedef struct _STREAM FAR* HSTREAM; // Handle to stream
- typedef void (AILCALLBACK FAR* AILSTREAMCB) (HSTREAM stream);
- typedef struct _STREAM {
- S32 block_oriented; // 1 if this is an ADPCM or ASI-compressed stream
- S32 using_ASI; // 1 if using ASI decoder to uncompress stream data
- ASISTAGE FAR *ASI; // handy pointer to our ASI coded
- HSAMPLE samp; // the sample handle
- U32 fileh; // the open file handle
- U8 FAR* bufs[3]; // the data buffers
- U32 bufsizes[3]; // the size of each buffer
- S32 bufsize; // size of each buffer
- S32 readsize; // size of each read block
- U32 buf1; // 0,1,2 (current buffer that we are reading into)
- S32 size1; // holds the current amount of data read
- U32 buf2; // 0,1,2 (the next buffer that we are reading into)
- S32 size2; // next buffer loaded up to
- U32 buf3; // 0,1,2 (the next buffer that we are reading into)
- S32 size3; // next buffer loaded up to
- U32 datarate; // datarate in bytes per second
- S32 filerate; // original datarate of the file
- S32 filetype; // file format type
- U32 fileflags; // file format flags (signed or unsigned)
- S32 totallen; // total length of the sound data
- U32 blocksize; // ADPCM block size
- S32 padding; // padding to be done
- S32 padded; // padding done
- S32 loadedsize; // size that has been loaded
- S32 loadedsome; // have we done any loads?
- U32 startpos; // point that the sound data begins
- U32 totalread; // total bytes read from the disk
- U32 loopsleft; // how many loops are left
- U32 error; // read error has occurred
- S32 preload; // preload the file into the first buffer
- S32 dontclose; // don't close the file
- S32 noback; // no background processing
- S32 alldone; // alldone
- S32 primeamount; // amount to load after a seek
- S32 readatleast; // forced amount to read on next service
- S32 playcontrol; // control: 0=stopped, 1=started, |8=paused, |16=sample paused
- AILSTREAMCB callback; // end of stream callback
- S32 user_data[8]; // Miscellaneous user data
- void FAR* next; // pointer to next stream
- #ifdef IS_WINDOWS
- S32 autostreaming; // are we autostreaming this stream
- S32 cb_IsWin32s; // Is the callback win32s?
- #endif
- S32 docallback; // set when it time to poll for a callback
- } STREAM_TYPE;
- DXDEC HSTREAM AILCALL AIL_open_stream(HDIGDRIVER dig, char FAR* filename, S32 stream_mem);
- DXDEC void AILCALL AIL_close_stream(HSTREAM stream);
- DXDEC S32 AILCALL AIL_service_stream(HSTREAM stream, S32 fillup);
- DXDEC void AILCALL AIL_start_stream(HSTREAM stream);
- DXDEC void AILCALL AIL_pause_stream(HSTREAM stream, S32 onoff);
- DXDEC void AILCALL AIL_set_stream_volume(HSTREAM stream,S32 volume);
- DXDEC void AILCALL AIL_set_stream_pan(HSTREAM stream,S32 pan);
- DXDEC S32 AILCALL AIL_stream_volume(HSTREAM stream);
- DXDEC S32 AILCALL AIL_stream_pan(HSTREAM stream);
- DXDEC void AILCALL AIL_set_stream_playback_rate(HSTREAM stream, S32 rate);
- DXDEC S32 AILCALL AIL_stream_playback_rate(HSTREAM stream);
- DXDEC S32 AILCALL AIL_stream_loop_count(HSTREAM stream);
- DXDEC void AILCALL AIL_set_stream_loop_count(HSTREAM stream, S32 count);
- DXDEC S32 AILCALL AIL_stream_status(HSTREAM stream);
- DXDEC void AILCALL AIL_set_stream_position(HSTREAM stream,S32 offset);
- DXDEC S32 AILCALL AIL_stream_position(HSTREAM stream);
- DXDEC void AILCALL AIL_stream_info(HSTREAM stream, S32 FAR* datarate, S32 FAR* sndtype, S32 FAR* length, S32 FAR* memory);
- DXDEC AILSTREAMCB AILCALL AIL_register_stream_callback(HSTREAM stream, AILSTREAMCB callback);
- DXDEC void AILCALL AIL_auto_service_stream(HSTREAM stream, S32 onoff);
- DXDEC void AILCALL AIL_set_stream_user_data (HSTREAM S,
- U32 index,
- S32 value);
- DXDEC S32 AILCALL AIL_stream_user_data (HSTREAM S,
- U32 index);
- DXDEC void AILCALL AIL_set_stream_ms_position (HSTREAM S,
- S32 milliseconds);
- DXDEC void AILCALL AIL_stream_ms_position (HSTREAM S, //)
- S32 FAR * total_milliseconds,
- S32 FAR * current_milliseconds);
- DXDEC void AILCALL AIL_set_stream_reverb(HSTREAM S,
- F32 reverb_level,
- F32 reverb_reflect_time,
- F32 reverb_decay_time);
- DXDEC void AILCALL AIL_stream_reverb (HSTREAM S,
- F32 FAR *reverb_level,
- F32 FAR *reverb_reflect_time,
- F32 FAR *reverb_decay_time);
- //
- // High-level DLS functions
- //
- typedef struct _DLSFILEID {
- S32 id;
- struct _DLSFILEID FAR* next;
- } DLSFILEID;
- typedef struct _DLSFILEID FAR* HDLSFILEID;
- typedef struct _DLSDEVICE {
- void FAR* pGetPref;
- void FAR* pSetPref;
- void FAR* pMSSOpen;
- void FAR* pOpen;
- void FAR* pClose;
- void FAR* pLoadFile;
- void FAR* pLoadMem;
- void FAR* pUnloadFile;
- void FAR* pUnloadAll;
- void FAR* pGetInfo;
- void FAR* pCompact;
- void FAR* pSetAttr;
- S32 DLSHandle;
- U32 format;
- U32 buffer_size;
- void FAR* buffer[2];
- HSAMPLE sample;
- HMDIDRIVER mdi;
- HDIGDRIVER dig;
- HDLSFILEID first;
- #ifdef IS_WINDOWS
- HMODULE lib;
- #else
- char FAR* DOSname;
- #endif
- } DLSDEVICE;
- typedef struct _DLSDEVICE FAR* HDLSDEVICE;
- typedef struct _AILDLSINFO {
- char Description[128];
- S32 MaxDLSMemory;
- S32 CurrentDLSMemory;
- S32 LargestSize;
- S32 GMAvailable;
- S32 GMBankSize;
- } AILDLSINFO;
- #ifdef IS_DOS
- typedef struct _AILDOSDLS {
- char FAR* description;
- void FAR* pDLSOpen;
- void FAR* pMSSOpen;
- void FAR* pOpen;
- void FAR* pClose;
- void FAR* pLoadFile;
- void FAR* pLoadMem;
- void FAR* pUnloadFile;
- void FAR* pUnloadAll;
- void FAR* pGetInfo;
- void FAR* pCompact;
- void FAR* pSetAttr;
- } AILDOSDLS;
- #endif
- DXDEC HDLSDEVICE AILCALL AIL_DLS_open(HMDIDRIVER mdi, HDIGDRIVER dig,
- #ifdef IS_WINDOWS
- char FAR* libname,
- #else
- AILDOSDLS FAR* dosdls,
- #endif
- U32 flags, U32 rate, S32 bits, S32 channels);
- //
- // Parameters for the dwFlag used in DLSClose() and flags in AIL_DLS_close
- //
- #define RETAIN_DLS_COLLECTION 0x00000001
- #define RETURN_TO_BOOTUP_STATE 0x00000002
- #define RETURN_TO_GM_ONLY_STATE 0x00000004
- #define DLS_COMPACT_MEMORY 0x00000008
- DXDEC void AILCALL AIL_DLS_close(HDLSDEVICE dls, U32 flags);
- DXDEC HDLSFILEID AILCALL AIL_DLS_load_file(HDLSDEVICE dls, char FAR* filename, U32 flags);
- DXDEC HDLSFILEID AILCALL AIL_DLS_load_memory(HDLSDEVICE dls, void FAR* memfile, U32 flags);
- //
- // other parameters for AIL_DLS_unload
- //
- #define AIL_DLS_UNLOAD_MINE 0
- #define AIL_DLS_UNLOAD_ALL ((HDLSFILEID)(U32)(S32)-1)
- DXDEC void AILCALL AIL_DLS_unload(HDLSDEVICE dls, HDLSFILEID dlsid);
- DXDEC void AILCALL AIL_DLS_compact(HDLSDEVICE dls);
- DXDEC void AILCALL AIL_DLS_get_info(HDLSDEVICE dls, AILDLSINFO FAR* info, S32 FAR* PercentCPU);
- DXDEC void AILCALL AIL_DLS_set_reverb(HDLSDEVICE dls,
- F32 reverb_level,
- F32 reverb_reflect_time,
- F32 reverb_decay_time);
- DXDEC void AILCALL AIL_DLS_get_reverb(HDLSDEVICE dls,
- F32 FAR* reverb_level,
- F32 FAR* reverb_reflect_time,
- F32 FAR* reverb_decay_time);
- //
- // Quick-integration service functions and data types
- //
- typedef struct
- {
- U32 FAR *data;
- S32 size;
- S32 type;
- void FAR *handle;
- S32 status;
- void FAR* next;
- S32 speed;
- S32 volume;
- S32 extravol;
- F32 rlevel;
- F32 rrtime;
- F32 rdtime;
- HDLSFILEID dlsid;
- void FAR* dlsmem;
- void FAR* dlsmemunc;
- S32 milliseconds;
- S32 length;
- S32 userdata;
- }
- AUDIO_TYPE;
- #define QSTAT_DONE 1 // Data has finished playing
- #define QSTAT_LOADED 2 // Data has been loaded, but not yet played
- #define QSTAT_PLAYING 3 // Data is currently playing
- typedef AUDIO_TYPE FAR * HAUDIO; // Generic handle to any audio data type
- #define AIL_QUICK_USE_WAVEOUT 2
- #define AIL_QUICK_MIDI_AND_DLS 2
- #define AIL_QUICK_DLS_ONLY 3
- #define AIL_QUICK_MIDI_AND_VORTEX_DLS 4
- #define AIL_QUICK_MIDI_AND_SONICVIBES_DLS 5
- DXDEC S32 AILCALL
- #ifdef IS_WINDOWS
- AIL_quick_startup (
- #else
- AIL_quick_startup_with_start(void* startup,
- #endif
- S32 use_digital,
- S32 use_MIDI,
- U32 output_rate,
- S32 output_bits,
- S32 output_channels);
- DXDEC void AILCALL AIL_quick_shutdown (void);
- DXDEC void AILCALL AIL_quick_handles (HDIGDRIVER FAR* pdig,
- HMDIDRIVER FAR* pmdi,
- HDLSDEVICE FAR* pdls );
- DXDEC HAUDIO AILCALL AIL_quick_load (char FAR *filename);
- DXDEC HAUDIO AILCALL AIL_quick_load_mem (void FAR *mem,
- U32 size);
- DXDEC HAUDIO AILCALL AIL_quick_copy (HAUDIO audio);
- DXDEC void AILCALL AIL_quick_unload (HAUDIO audio);
- DXDEC S32 AILCALL AIL_quick_play (HAUDIO audio,
- U32 loop_count);
- DXDEC void AILCALL AIL_quick_halt (HAUDIO audio);
- DXDEC S32 AILCALL AIL_quick_status (HAUDIO audio);
- DXDEC HAUDIO AILCALL AIL_quick_load_and_play (char FAR *filename,
- U32 loop_count,
- S32 wait_request);
- DXDEC void AILCALL AIL_quick_set_speed (HAUDIO audio, S32 speed);
- DXDEC void AILCALL AIL_quick_set_volume (HAUDIO audio, S32 volume, S32 extravol);
- DXDEC void AILCALL AIL_quick_set_reverb (HAUDIO audio,
- F32 reverb_level,
- F32 reverb_reflect_time,
- F32 reverb_decay_time);
- DXDEC void AILCALL AIL_quick_set_ms_position(HAUDIO audio,S32 milliseconds);
- DXDEC S32 AILCALL AIL_quick_ms_position(HAUDIO audio);
- DXDEC S32 AILCALL AIL_quick_ms_length(HAUDIO audio);
- #define AIL_QUICK_XMIDI_TYPE 1
- #define AIL_QUICK_DIGITAL_TYPE 2
- #define AIL_QUICK_DLS_XMIDI_TYPE 3
- #define AIL_QUICK_MPEG_DIGITAL_TYPE 4
- DXDEC S32 AILCALL AIL_quick_type(HAUDIO audio);
- //
- // used for AIL_process
- //
- typedef struct _AILMIXINFO {
- AILSOUNDINFO Info;
- ADPCMDATA mss_adpcm;
- U32 src_fract;
- S32 left_val;
- S32 right_val;
- } AILMIXINFO;
- DXDEC S32 AILCALL AIL_WAV_info(void FAR* data, AILSOUNDINFO FAR* info);
- DXDEC S32 AILCALL AIL_size_processed_digital_audio(
- U32 dest_rate,
- U32 dest_format,
- S32 num_srcs,
- AILMIXINFO FAR* src);
- DXDEC S32 AILCALL AIL_process_digital_audio(
- void FAR *dest_buffer,
- S32 dest_buffer_size,
- U32 dest_rate,
- U32 dest_format,
- S32 num_srcs,
- AILMIXINFO FAR* src);
- #define AIL_LENGTHY_INIT 0
- #define AIL_LENGTHY_SET_PREFERENCE 1
- #define AIL_LENGTHY_UPDATE 2
- #define AIL_LENGTHY_DONE 3
- typedef S32 (AILCALLBACK FAR* AILLENGTHYCB)(U32 state,U32 user);
- typedef S32 (AILCALLBACK FAR* AILCODECSETPREF)(char FAR* preference,U32 value);
- DXDEC S32 AILCALL AIL_compress_ASI(AILSOUNDINFO FAR* info, //)
- char FAR* filename_ext,
- void FAR* FAR* outdata,
- U32 FAR* outsize,
- AILLENGTHYCB callback);
- DXDEC S32 AILCALL AIL_decompress_ASI(void FAR* indata, //)
- U32 insize,
- char FAR* filename_ext,
- void FAR* FAR* wav,
- U32 FAR* wavsize,
- AILLENGTHYCB callback);
- DXDEC S32 AILCALL AIL_compress_ADPCM(AILSOUNDINFO FAR * info,
- void FAR* FAR* outdata, U32 FAR* outsize);
- DXDEC S32 AILCALL AIL_decompress_ADPCM(AILSOUNDINFO FAR * info,
- void FAR* FAR* outdata, U32 FAR* outsize);
- DXDEC S32 AILCALL AIL_compress_DLS(void FAR* dls,
- char FAR* compression_extension,
- void FAR* FAR* mls, U32 FAR* mlssize,
- AILLENGTHYCB callback);
- DXDEC S32 AILCALL AIL_merge_DLS_with_XMI(void FAR* xmi, void FAR* dls,
- void FAR* FAR* mss, U32 FAR* msssize);
- DXDEC S32 AILCALL AIL_extract_DLS( void FAR *source_image, //)
- S32 source_size,
- void FAR * FAR *XMI_output_data,
- S32 FAR *XMI_output_size,
- void FAR * FAR *DLS_output_data,
- S32 FAR *DLS_output_size,
- AILLENGTHYCB callback);
- #define AILFILTERDLS_USINGLIST 1
- DXDEC S32 AILCALL AIL_filter_DLS_with_XMI(void FAR* xmi, void FAR* dls,
- void FAR* FAR* dlsout, U32 FAR* dlssize,
- S32 flags, AILLENGTHYCB callback);
- #define AILMIDITOXMI_USINGLIST 1
- #define AILMIDITOXMI_TOLERANT 2
- DXDEC S32 AILCALL AIL_MIDI_to_XMI (void FAR* MIDI,
- U32 MIDI_size,
- void FAR* FAR*XMIDI,
- U32 FAR* XMIDI_size,
- S32 flags);
- #define AILMIDILIST_ROLANDSYSEX 1
- #define AILMIDILIST_ROLANDUN 2
- #define AILMIDILIST_ROLANDAB 4
- DXDEC S32 AILCALL AIL_list_MIDI (void FAR* MIDI,
- U32 MIDI_size,
- char FAR* FAR* lst,
- U32 FAR* lst_size,
- S32 flags);
- #define AILDLSLIST_ARTICULATION 1
- #define AILDLSLIST_DUMP_WAVS 2
- DXDEC S32 AILCALL AIL_list_DLS (void FAR* DLS,
- char FAR* FAR* lst,
- U32 FAR* lst_size,
- S32 flags,
- C8 FAR* title);
- #define AILFILETYPE_UNKNOWN 0
- #define AILFILETYPE_PCM_WAV 1
- #define AILFILETYPE_ADPCM_WAV 2
- #define AILFILETYPE_OTHER_WAV 3
- #define AILFILETYPE_VOC 4
- #define AILFILETYPE_MIDI 5
- #define AILFILETYPE_XMIDI 6
- #define AILFILETYPE_XMIDI_DLS 7
- #define AILFILETYPE_XMIDI_MLS 8
- #define AILFILETYPE_DLS 9
- #define AILFILETYPE_MLS 10
- #define AILFILETYPE_MPEG_L1_AUDIO 11
- #define AILFILETYPE_MPEG_L2_AUDIO 12
- #define AILFILETYPE_MPEG_L3_AUDIO 13
- DXDEC S32 AILCALL AIL_file_type(void FAR* data, U32 size);
- DXDEC S32 AILCALL AIL_find_DLS (void FAR* data, U32 size,
- void FAR* FAR* xmi, U32 FAR* xmisize,
- void FAR* FAR* dls, U32 FAR* dlssize);
- #ifdef IS_WIN32
- //
- // Auxiliary 2D interface calls
- //
- DXDEC HDIGDRIVER AILCALL AIL_primary_digital_driver (HDIGDRIVER new_primary);
- //
- // Filter result codes
- //
- typedef S32 FLTRESULT;
- #define FLT_NOERR 0 // Success -- no error
- #define FLT_NOT_ENABLED 1 // FLT not enabled
- #define FLT_ALREADY_STARTED 2 // FLT already started
- #define FLT_INVALID_PARAM 3 // Invalid parameters used
- #define FLT_INTERNAL_ERR 4 // Internal error in FLT driver
- #define FLT_OUT_OF_MEM 5 // Out of system RAM
- #define FLT_ERR_NOT_IMPLEMENTED 6 // Feature not implemented
- #define FLT_NOT_FOUND 7 // FLT supported device not found
- #define FLT_NOT_INIT 8 // FLT not initialized
- #define FLT_CLOSE_ERR 9 // FLT not closed correctly
- //############################################################################
- //## ##
- //## Interface "MSS pipeline filter" ##
- //## ##
- //############################################################################
- typedef FLTRESULT (AILCALL FAR *FLT_STARTUP)(void);
- typedef FLTRESULT (AILCALL FAR *FLT_SHUTDOWN)(void);
- typedef C8 FAR * (AILCALL FAR *FLT_ERROR)(void);
- typedef S32 (AILCALL FAR *FLT_SET_PROVIDER_PREFERENCE)(HATTRIB preference,
- void FAR* value);
- typedef HDRIVERSTATE (AILCALL FAR *FLT_OPEN_DRIVER) (HDIGDRIVER dig,
- S32 FAR *build_buffer,
- S32 build_buffer_size);
- typedef FLTRESULT (AILCALL FAR *FLT_CLOSE_DRIVER) (HDRIVERSTATE state);
- typedef void (AILCALL FAR *FLT_PREMIX_PROCESS) (HDRIVERSTATE driver);
- typedef void (AILCALL FAR *FLT_POSTMIX_PROCESS) (HDRIVERSTATE driver);
- //############################################################################
- //## ##
- //## Interface "Pipeline filter sample services" ##
- //## ##
- //############################################################################
- typedef HSAMPLESTATE (AILCALL FAR * FLTSMP_OPEN_SAMPLE) (HDRIVERSTATE driver,
- HSAMPLE S);
- typedef FLTRESULT (AILCALL FAR * FLTSMP_CLOSE_SAMPLE) (HSAMPLESTATE state);
- typedef S32 (AILCALL FAR * FLTSMP_SAMPLE_PROCESS) (HSAMPLESTATE state,
- void FAR * FAR *orig_src,
- U32 FAR * orig_src_fract,
- void FAR * orig_src_end,
- S32 FAR * FAR *build_dest,
- void FAR * build_dest_end,
- S32 FAR * left_val,
- S32 FAR * right_val,
- S32 playback_ratio,
- S32 left_scale,
- S32 right_scale,
- S32 base_scale,
- MIXSTAGE FAR * mixer_provider,
- U32 mixer_operation);
- typedef S32 (AILCALL FAR * FLTSMP_SAMPLE_ATTRIBUTE) (HSAMPLESTATE state,
- HATTRIB attribute);
- typedef S32 (AILCALL FAR * FLTSMP_SET_SAMPLE_PREFERENCE) (HSAMPLESTATE state,
- HATTRIB preference,
- void FAR* value);
- //
- // Pipeline filter calls
- //
- DXDEC S32 AILCALL AIL_enumerate_filters (HPROENUM FAR *next,
- HPROVIDER FAR *dest,
- C8 FAR * FAR *name);
- DXDEC HDRIVERSTATE
- AILCALL AIL_open_filter (HPROVIDER lib,
- HDIGDRIVER dig);
- DXDEC void AILCALL AIL_close_filter (HDRIVERSTATE filter);
- DXDEC S32 AILCALL AIL_enumerate_filter_attributes
- (HPROVIDER lib,
- HINTENUM FAR * next,
- RIB_INTERFACE_ENTRY FAR * dest);
- DXDEC void AILCALL AIL_filter_attribute (HPROVIDER lib,
- C8 FAR * name,
- void FAR * val);
- DXDEC void AILCALL AIL_set_filter_preference
- (HPROVIDER lib,
- C8 FAR * name,
- void FAR * val);
- DXDEC S32 AILCALL AIL_enumerate_filter_sample_attributes
- (HPROVIDER lib,
- HINTENUM FAR * next,
- RIB_INTERFACE_ENTRY FAR * dest);
- DXDEC void AILCALL AIL_filter_sample_attribute
- (HSAMPLE S,
- C8 FAR * name,
- void FAR * val);
- DXDEC void AILCALL AIL_filter_stream_attribute
- (HSTREAM S,
- C8 FAR * name,
- void FAR * val);
- DXDEC void AILCALL AIL_filter_DLS_attribute
- (HDLSDEVICE dls,
- C8 FAR * name,
- void FAR * val);
- DXDEC void AILCALL AIL_set_filter_sample_preference
- (HSAMPLE S,
- C8 FAR * name,
- void FAR * val);
- DXDEC void AILCALL AIL_set_filter_stream_preference
- (HSTREAM S,
- C8 FAR * name,
- void FAR * val);
- DXDEC void AILCALL AIL_set_filter_DLS_preference
- (HDLSDEVICE dls,
- C8 FAR * name,
- void FAR * val);
- typedef struct _FLTPROVIDER
- {
- PROVIDER_QUERY_ATTRIBUTE PROVIDER_query_attribute;
- FLT_STARTUP startup;
- FLT_ERROR error;
- FLT_SHUTDOWN shutdown;
- FLT_SET_PROVIDER_PREFERENCE set_provider_preference;
- FLT_OPEN_DRIVER open_driver;
- FLT_CLOSE_DRIVER close_driver;
- FLT_PREMIX_PROCESS premix_process;
- FLT_POSTMIX_PROCESS postmix_process;
- FLTSMP_OPEN_SAMPLE open_sample;
- FLTSMP_CLOSE_SAMPLE close_sample;
- FLTSMP_SAMPLE_PROCESS sample_process;
- FLTSMP_SAMPLE_ATTRIBUTE sample_attribute;
- FLTSMP_SET_SAMPLE_PREFERENCE set_sample_preference;
- HDIGDRIVER dig;
- HPROVIDER provider;
- HDRIVERSTATE driver_state;
- struct _FLTPROVIDER FAR *next;
- }
- FLTPROVIDER;
- //
- // 3D provider calls
- //
- DXDEC S32 AILCALL AIL_enumerate_3D_providers (HPROENUM FAR *next,
- HPROVIDER FAR *dest,
- C8 FAR * FAR *name);
- DXDEC M3DRESULT AILCALL AIL_open_3D_provider (HPROVIDER lib);
- DXDEC void AILCALL AIL_close_3D_provider (HPROVIDER lib);
- DXDEC S32 AILCALL AIL_enumerate_3D_provider_attributes
- (HPROVIDER lib,
- HINTENUM FAR * next,
- RIB_INTERFACE_ENTRY FAR * dest);
- DXDEC void AILCALL AIL_3D_provider_attribute (HPROVIDER lib,
- C8 FAR * name,
- void FAR * val);
- DXDEC void AILCALL AIL_set_3D_provider_preference(HPROVIDER lib,
- C8 FAR * name,
- void FAR * val);
- struct H3D
- {
- H3DPOBJECT actual;
- HPROVIDER owner;
- S32 user_data[8];
- };
- typedef struct _M3DPROVIDER
- {
- PROVIDER_QUERY_ATTRIBUTE PROVIDER_query_attribute;
- M3D_STARTUP startup;
- M3D_ERROR error;
- M3D_SHUTDOWN shutdown;
- M3D_SET_PROVIDER_PREFERENCE set_provider_preference;
- M3D_ACTIVATE activate;
- M3D_ALLOCATE_3D_SAMPLE_HANDLE allocate_3D_sample_handle;
- M3D_RELEASE_3D_SAMPLE_HANDLE release_3D_sample_handle;
- M3D_START_3D_SAMPLE start_3D_sample;
- M3D_STOP_3D_SAMPLE stop_3D_sample;
- M3D_RESUME_3D_SAMPLE resume_3D_sample;
- M3D_END_3D_SAMPLE end_3D_sample;
- M3D_SET_3D_SAMPLE_DATA set_3D_sample_data;
- M3D_SET_3D_SAMPLE_VOLUME set_3D_sample_volume;
- M3D_SET_3D_SAMPLE_PLAYBACK_RATE set_3D_sample_playback_rate;
- M3D_SET_3D_SAMPLE_OFFSET set_3D_sample_offset;
- M3D_SET_3D_SAMPLE_LOOP_COUNT set_3D_sample_loop_count;
- M3D_SET_3D_SAMPLE_LOOP_BLOCK set_3D_sample_loop_block;
- M3D_3D_SAMPLE_STATUS sample_status;
- M3D_3D_SAMPLE_VOLUME sample_volume;
- M3D_3D_SAMPLE_PLAYBACK_RATE sample_playback_rate;
- M3D_3D_SAMPLE_OFFSET sample_offset;
- M3D_3D_SAMPLE_LENGTH sample_length;
- M3D_3D_SAMPLE_LOOP_COUNT sample_loop_count;
- M3D_SET_3D_SAMPLE_DISTANCES set_3D_sample_distances;
- M3D_3D_SAMPLE_DISTANCES sample_distances;
- M3D_ACTIVE_3D_SAMPLE_COUNT active_3D_sample_count;
- M3D_3D_OPEN_LISTENER open_listener;
- M3D_3D_CLOSE_LISTENER close_listener;
- M3D_3D_OPEN_OBJECT open_object;
- M3D_3D_CLOSE_OBJECT close_object;
- M3D_SET_3D_POSITION set_3D_position;
- M3D_SET_3D_VELOCITY set_3D_velocity;
- M3D_SET_3D_VELOCITY_VECTOR set_3D_velocity_vector;
- M3D_SET_3D_ORIENTATION set_3D_orientation;
- M3D_3D_POSITION position;
- M3D_3D_VELOCITY velocity;
- M3D_3D_ORIENTATION orientation;
- M3D_3D_UPDATE_POSITION update_position;
- M3D_3D_AUTO_UPDATE_POSITION auto_update_position;
- M3D_3D_SAMPLE_ATTRIBUTE sample_query_attribute;
- M3D_3D_SET_SAMPLE_PREFERENCE set_sample_preference;
- } M3DPROVIDER;
- //
- // Sample calls
- //
- DXDEC H3DSAMPLE AILCALL AIL_allocate_3D_sample_handle
- (HPROVIDER lib);
- DXDEC void AILCALL AIL_release_3D_sample_handle
- (H3DSAMPLE S);
- DXDEC void AILCALL AIL_start_3D_sample (H3DSAMPLE S);
- DXDEC void AILCALL AIL_stop_3D_sample (H3DSAMPLE S);
- DXDEC void AILCALL AIL_resume_3D_sample (H3DSAMPLE S);
- DXDEC void AILCALL AIL_end_3D_sample (H3DSAMPLE S);
- DXDEC S32 AILCALL AIL_set_3D_sample_file (H3DSAMPLE S,
- void FAR *file_image);
- DXDEC S32 AILCALL AIL_set_3D_sample_info (H3DSAMPLE S,
- AILSOUNDINFO FAR *info);
- DXDEC void AILCALL AIL_set_3D_sample_volume (H3DSAMPLE S,
- S32 volume);
- DXDEC void AILCALL AIL_set_3D_sample_offset (H3DSAMPLE S,
- U32 offset);
- DXDEC void AILCALL AIL_set_3D_sample_playback_rate
- (H3DSAMPLE S,
- S32 playback_rate);
- DXDEC void AILCALL AIL_set_3D_sample_loop_count(H3DSAMPLE S,
- U32 loops);
- DXDEC void AILCALL AIL_set_3D_sample_loop_block(H3DSAMPLE S,
- S32 loop_start_offset,
- S32 loop_end_offset);
- DXDEC U32 AILCALL AIL_3D_sample_status (H3DSAMPLE S);
- DXDEC S32 AILCALL AIL_3D_sample_volume (H3DSAMPLE S);
- DXDEC U32 AILCALL AIL_3D_sample_offset (H3DSAMPLE S);
- DXDEC S32 AILCALL AIL_3D_sample_playback_rate (H3DSAMPLE S);
- DXDEC U32 AILCALL AIL_3D_sample_length (H3DSAMPLE S);
- DXDEC U32 AILCALL AIL_3D_sample_loop_count (H3DSAMPLE S);
- #define AIL_set_3D_sample_distances AIL_set_3D_sample_float_distances
- #define AIL_3D_sample_distances AIL_3D_sample_float_distances
- DXDEC void AILCALL AIL_set_3D_sample_float_distances
- (H3DSAMPLE S,
- F32 max_front_dist,
- F32 min_front_dist,
- F32 max_back_dist,
- F32 min_back_dist);
- DXDEC void AILCALL AIL_3D_sample_float_distances
- (H3DSAMPLE S,
- F32 FAR * max_front_dist,
- F32 FAR * min_front_dist,
- F32 FAR * max_back_dist,
- F32 FAR * min_back_dist);
- DXDEC S32 AILCALL AIL_active_3D_sample_count (HPROVIDER lib);
- DXDEC S32 AILCALL AIL_enumerate_3D_sample_attributes
- (HPROVIDER lib,
- HINTENUM FAR * next,
- RIB_INTERFACE_ENTRY FAR * dest);
- DXDEC void AILCALL AIL_3D_sample_attribute (H3DSAMPLE samp,
- C8 FAR * name,
- void FAR * val);
- DXDEC void AILCALL AIL_set_3D_sample_preference (H3DSAMPLE samp,
- C8 FAR * name,
- void FAR * val);
- //
- // Positioning-object allocation calls
- //
- DXDEC H3DPOBJECT AILCALL AIL_open_3D_listener (HPROVIDER lib);
- DXDEC void AILCALL AIL_close_3D_listener (H3DPOBJECT listener);
- DXDEC H3DPOBJECT AILCALL AIL_open_3D_object (HPROVIDER lib);
- DXDEC void AILCALL AIL_close_3D_object (H3DPOBJECT obj);
- //
- // 3D object calls
- //
- DXDEC void AILCALL AIL_set_3D_position (H3DPOBJECT obj,
- F32 X,
- F32 Y,
- F32 Z);
- DXDEC void AILCALL AIL_set_3D_velocity (H3DPOBJECT obj,
- F32 dX_per_ms,
- F32 dY_per_ms,
- F32 dZ_per_ms,
- F32 magnitude);
- DXDEC void AILCALL AIL_set_3D_velocity_vector (H3DPOBJECT obj,
- F32 dX_per_ms,
- F32 dY_per_ms,
- F32 dZ_per_ms);
- DXDEC void AILCALL AIL_set_3D_orientation (H3DPOBJECT obj,
- F32 X_face,
- F32 Y_face,
- F32 Z_face,
- F32 X_up,
- F32 Y_up,
- F32 Z_up);
- DXDEC void AILCALL AIL_3D_position (H3DPOBJECT obj,
- F32 FAR *X,
- F32 FAR *Y,
- F32 FAR *Z);
- DXDEC void AILCALL AIL_3D_velocity (H3DPOBJECT obj,
- F32 FAR *dX_per_ms,
- F32 FAR *dY_per_ms,
- F32 FAR *dZ_per_ms);
- DXDEC void AILCALL AIL_3D_orientation (H3DPOBJECT obj,
- F32 FAR *X_face,
- F32 FAR *Y_face,
- F32 FAR *Z_face,
- F32 FAR *X_up,
- F32 FAR *Y_up,
- F32 FAR *Z_up);
- DXDEC void AILCALL AIL_3D_update_position (H3DPOBJECT obj,
- F32 dt_milliseconds);
- DXDEC void AILCALL AIL_3D_auto_update_position (H3DPOBJECT obj,
- S32 enable);
- DXDEC void AILCALL AIL_set_3D_user_data (H3DPOBJECT obj,
- U32 index,
- S32 value);
- DXDEC S32 AILCALL AIL_3D_user_data (H3DPOBJECT obj,
- U32 index);
- // Obsolete 3D function names:
- #define AIL_set_3D_object_user_data AIL_set_3D_user_data
- #define AIL_3D_object_user_data AIL_3D_user_data
- #define AIL_3D_open_listener AIL_open_3D_listener
- #define AIL_3D_close_listener AIL_close_3D_listener
- #define AIL_3D_open_object AIL_open_3D_object
- #define AIL_3D_close_object AIL_close_3D_object
- //
- // enumerated values for EAX
- //
- #ifndef EAX_H_INCLUDED
- enum
- {
- EAX_ENVIRONMENT_GENERIC, // factory default
- EAX_ENVIRONMENT_PADDEDCELL,
- EAX_ENVIRONMENT_ROOM, // standard environments
- EAX_ENVIRONMENT_BATHROOM,
- EAX_ENVIRONMENT_LIVINGROOM,
- EAX_ENVIRONMENT_STONEROOM,
- EAX_ENVIRONMENT_AUDITORIUM,
- EAX_ENVIRONMENT_CONCERTHALL,
- EAX_ENVIRONMENT_CAVE,
- EAX_ENVIRONMENT_ARENA,
- EAX_ENVIRONMENT_HANGAR,
- EAX_ENVIRONMENT_CARPETEDHALLWAY,
- EAX_ENVIRONMENT_HALLWAY,
- EAX_ENVIRONMENT_STONECORRIDOR,
- EAX_ENVIRONMENT_ALLEY,
- EAX_ENVIRONMENT_FOREST,
- EAX_ENVIRONMENT_CITY,
- EAX_ENVIRONMENT_MOUNTAINS,
- EAX_ENVIRONMENT_QUARRY,
- EAX_ENVIRONMENT_PLAIN,
- EAX_ENVIRONMENT_PARKINGLOT,
- EAX_ENVIRONMENT_SEWERPIPE,
- EAX_ENVIRONMENT_UNDERWATER,
- EAX_ENVIRONMENT_DRUGGED,
- EAX_ENVIRONMENT_DIZZY,
- EAX_ENVIRONMENT_PSYCHOTIC,
- EAX_ENVIRONMENT_COUNT // total number of environments
- };
- #define EAX_REVERBMIX_USEDISTANCE (-1.0F)
- #endif
- #else
- typedef struct _FLTPROVIDER
- {
- U32 junk;
- } FLTPROVIDER;
- #endif
- #ifdef __cplusplus
- }
- #endif
- #ifdef _PUSHPOP_SUPPORTED
- #pragma pack(pop)
- #else
- #pragma pack()
- #endif
- #endif
|