home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 106 / EnigmaAmiga106CD.iso / software / sviluppo / ahisrc / include / devices / ahi.h
Encoding:
C/C++ Source or Header  |  1999-08-29  |  14.3 KB  |  409 lines

  1. #ifndef DEVICES_AHI_H
  2. #define DEVICES_AHI_H
  3.  
  4. /*
  5. **    $VER: ahi.h 5.0 (30.8.99)
  6. **
  7. **    ahi.device definitions
  8. **
  9. **    (C) Copyright 1994-1999 Martin Blom
  10. **    All Rights Reserved.
  11. **
  12. ** (TAB SIZE: 8)
  13. */
  14.  
  15. /*****************************************************************************/
  16.  
  17. #ifndef EXEC_TYPES_H
  18. #include <exec/types.h>
  19. #endif
  20.  
  21. #ifndef EXEC_IO_H
  22. #include <exec/io.h>
  23. #endif
  24.  
  25. #ifndef UTILITY_TAGITEM_H
  26. #include <utility/tagitem.h>
  27. #endif
  28.  
  29. #ifndef LIBRARIES_IFFPARSE_H
  30. #include <libraries/iffparse.h>
  31. #endif
  32.  
  33. /*****************************************************************************/
  34.  
  35. #ifndef EIGHTSVX_H                 /* Do not define Fixed twice */
  36.  
  37. typedef LONG    Fixed;                /* A fixed-point value, 16 bits
  38.                            to the left of the point and
  39.                            16 bits to the right */
  40. #endif
  41. typedef Fixed    sposition;
  42.  
  43. /*** STRUCTURES */
  44.  
  45.  /* AHIAudioCtrl */
  46. struct AHIAudioCtrl
  47. {
  48.     APTR    ahiac_UserData;
  49.     /* Lots of private data follows! */
  50. };
  51.  
  52.  /* AHISoundMessage */
  53. struct AHISoundMessage
  54. {
  55.      UWORD    ahism_Channel;
  56. };
  57.  
  58.  /* AHIRecordMessage */
  59. struct AHIRecordMessage
  60. {
  61.     ULONG    ahirm_Type;            /* Format of buffer (object) */
  62.     APTR    ahirm_Buffer;            /* Pointer to the sample array */
  63.     ULONG    ahirm_Length;            /* Number of sample frames in buffer */
  64. };
  65.  
  66.  /* AHISampleInfo */
  67. struct AHISampleInfo
  68. {
  69.     ULONG    ahisi_Type;            /* Format of samples */
  70.     APTR    ahisi_Address;            /* Address to array of samples */
  71.     ULONG    ahisi_Length;            /* Number of samples in array */
  72. };
  73.  
  74.  
  75.  /* AHIAudioModeRequester */
  76. struct AHIAudioModeRequester
  77. {
  78.     ULONG    ahiam_AudioID;            /* Selected audio mode */
  79.     ULONG    ahiam_MixFreq;            /* Selected mixing/sampling frequency */
  80.     
  81.     WORD    ahiam_LeftEdge;            /* Coordinates of requester on exit */
  82.     WORD    ahiam_TopEdge;
  83.     WORD    ahiam_Width;
  84.     WORD    ahiam_Height;
  85.  
  86.     BOOL    ahiam_InfoOpened;        /* Info window opened on exit? */
  87.     WORD    ahiam_InfoLeftEdge;        /* Last coordinates of Info window */
  88.     WORD    ahiam_InfoTopEdge;
  89.     WORD    ahiam_InfoWidth;
  90.     WORD    ahiam_InfoHeight;
  91.  
  92.     APTR    ahiam_UserData;            /* You can store your own data here */
  93.     /* Lots of private data follows! */
  94. };
  95.  
  96.  /* AHIEffMasterVolume */
  97. struct AHIEffMasterVolume
  98. {
  99.     ULONG    ahie_Effect;            /* Set to AHIET_MASTERVOLUME */
  100.     Fixed    ahiemv_Volume;            /* See autodocs for range! */
  101. };
  102.  
  103.  /* AHIEffOutputBuffer */
  104. struct AHIEffOutputBuffer
  105. {
  106.     ULONG         ahie_Effect;        /* Set to AHIET_OUTPUTBUFFER */
  107.     struct Hook    *ahieob_Func;
  108.  /* These fields are filled by AHI */
  109.     ULONG         ahieob_Type;        /* Format of buffer */
  110.     APTR         ahieob_Buffer;        /* Pointer to the sample array */
  111.     ULONG         ahieob_Length;        /* Number of sample frames in buffer */
  112. };
  113.  
  114.  /* AHIEffDSPMask (V4) */
  115. struct AHIEffDSPMask
  116. {
  117.     ULONG    ahie_Effect;            /* Set to AHIET_DSPMASK */
  118.     UWORD    ahiedm_Channels;        /* Number of elements in array */
  119.     UBYTE    ahiedm_Mask[0];            /* Here follows the array */
  120. };
  121.  
  122. #define AHIEDM_WET        (0)
  123. #define AHIEDM_DRY        (1)
  124.  
  125.  /* AHIEffDSPEcho (V4) */
  126. struct AHIEffDSPEcho
  127. {
  128.     ULONG    ahie_Effect;            /* Set to AHIET_DSPECHO */
  129.     ULONG    ahiede_Delay;            /* In samples */
  130.     Fixed    ahiede_Feedback;
  131.     Fixed    ahiede_Mix;
  132.     Fixed    ahiede_Cross;
  133. };
  134.  
  135. #define AHIDSPEcho AHIEffDSPEcho        /* Fix for error in V4 includes    */
  136.  
  137.  /* AHIEffChannelInfo (V4) */
  138.  
  139. struct AHIEffChannelInfo
  140. {
  141.     ULONG         ahie_Effect;        /* Set to AHIET_CHANNELINFO */
  142.     struct Hook    *ahieci_Func;
  143.     UWORD         ahieci_Channels;
  144.     UWORD         ahieci_Pad;
  145.  /* The rest is filled by AHI */
  146.      ULONG         ahieci_Offset[0];    /* The array follows */
  147. };
  148.  
  149. /*** TAGS */
  150.  
  151. #define AHI_TagBase        (TAG_USER)
  152. #define AHI_TagBaseR        (AHI_TagBase|0x8000)
  153.  
  154.  /* AHI_AllocAudioA tags */
  155. #define AHIA_AudioID        (AHI_TagBase+1)        /* Desired audio mode */
  156. #define AHIA_MixFreq        (AHI_TagBase+2)        /* Suggested mixing frequency */
  157. #define AHIA_Channels        (AHI_TagBase+3)        /* Suggested number of channels */
  158. #define AHIA_Sounds        (AHI_TagBase+4)        /* Number of sounds to use */
  159. #define AHIA_SoundFunc        (AHI_TagBase+5)        /* End-of-Sound Hook */
  160. #define AHIA_PlayerFunc        (AHI_TagBase+6)        /* Player Hook */
  161. #define AHIA_PlayerFreq        (AHI_TagBase+7)        /* Frequency for player Hook (Fixed)*/
  162. #define AHIA_MinPlayerFreq    (AHI_TagBase+8)        /* Minimum Frequency for player Hook */
  163. #define AHIA_MaxPlayerFreq    (AHI_TagBase+9)        /* Maximum Frequency for player Hook */
  164. #define AHIA_RecordFunc        (AHI_TagBase+10)    /* Sample recording Hook */
  165. #define AHIA_UserData        (AHI_TagBase+11)    /* What to put in ahiac_UserData */
  166. #define AHIA_AntiClickSamples    (AHI_TagBase+13)    /* # of samples to smooth (V5)    */
  167.  
  168.   /* AHI_PlayA tags (V4) */
  169. #define AHIP_BeginChannel    (AHI_TagBase+40)    /* All command tags should be... */
  170. #define AHIP_EndChannel        (AHI_TagBase+41)    /* ... enclosed by these tags. */
  171. #define AHIP_Freq        (AHI_TagBase+50)
  172. #define AHIP_Vol        (AHI_TagBase+51)
  173. #define AHIP_Pan        (AHI_TagBase+52)
  174. #define AHIP_Sound        (AHI_TagBase+53)
  175. #define AHIP_Offset        (AHI_TagBase+54)
  176. #define AHIP_Length        (AHI_TagBase+55)
  177. #define AHIP_LoopFreq        (AHI_TagBase+60)
  178. #define AHIP_LoopVol        (AHI_TagBase+61)
  179. #define AHIP_LoopPan        (AHI_TagBase+62)
  180. #define AHIP_LoopSound        (AHI_TagBase+63)
  181. #define AHIP_LoopOffset        (AHI_TagBase+64)
  182. #define AHIP_LoopLength        (AHI_TagBase+65)
  183.  
  184.  /* AHI_ControlAudioA tags */
  185. #define AHIC_Play        (AHI_TagBase+80)    /* Boolean */
  186. #define AHIC_Record        (AHI_TagBase+81)    /* Boolean */
  187. #define AHIC_MonitorVolume    (AHI_TagBase+82)
  188. #define AHIC_MonitorVolume_Query (AHI_TagBase+83)    /* ti_Data is pointer to Fixed (LONG) */
  189. #define AHIC_MixFreq_Query    (AHI_TagBase+84)    /* ti_Data is pointer to ULONG */
  190. /* --- New for V2, they will be ignored by V1 --- */
  191. #define AHIC_InputGain        (AHI_TagBase+85)
  192. #define AHIC_InputGain_Query    (AHI_TagBase+86)    /* ti_Data is pointer to Fixed (LONG) */
  193. #define AHIC_OutputVolume    (AHI_TagBase+87)
  194. #define AHIC_OutputVolume_Query    (AHI_TagBase+88)    /* ti_Data is pointer to Fixed (LONG) */
  195. #define AHIC_Input        (AHI_TagBase+89)
  196. #define AHIC_Input_Query    (AHI_TagBase+90)    /* ti_Data is pointer to ULONG */
  197. #define AHIC_Output        (AHI_TagBase+91)
  198. #define AHIC_Output_Query    (AHI_TagBase+92)    /* ti_Data is pointer to ULONG */
  199.  
  200.  /* AHI_GetAudioAttrsA tags */
  201. #define AHIDB_AudioID        (AHI_TagBase+100)
  202. #define AHIDB_Driver        (AHI_TagBaseR+101)    /* Pointer to name of driver */
  203. #define AHIDB_Flags        (AHI_TagBase+102)    /* Private! */
  204. #define AHIDB_Volume        (AHI_TagBase+103)    /* Boolean */
  205. #define AHIDB_Panning        (AHI_TagBase+104)    /* Boolean */
  206. #define AHIDB_Stereo        (AHI_TagBase+105)    /* Boolean */
  207. #define AHIDB_HiFi        (AHI_TagBase+106)    /* Boolean */
  208. #define AHIDB_PingPong        (AHI_TagBase+107)    /* Boolean */
  209. #define AHIDB_MultTable        (AHI_TagBase+108)    /* Private! */
  210. #define AHIDB_Name        (AHI_TagBaseR+109)    /* Pointer to name of this mode */
  211. #define AHIDB_Bits        (AHI_TagBase+110)    /* Output bits */
  212. #define AHIDB_MaxChannels    (AHI_TagBase+111)    /* Max supported channels */
  213. #define AHIDB_MinMixFreq    (AHI_TagBase+112)    /* Min mixing freq. supported */
  214. #define AHIDB_MaxMixFreq    (AHI_TagBase+113)    /* Max mixing freq. supported */
  215. #define AHIDB_Record        (AHI_TagBase+114)    /* Boolean */
  216. #define AHIDB_Frequencies    (AHI_TagBase+115)
  217. #define AHIDB_FrequencyArg    (AHI_TagBase+116)    /* ti_Data is frequency index */
  218. #define AHIDB_Frequency        (AHI_TagBase+117)
  219. #define AHIDB_Author        (AHI_TagBase+118)    /* Pointer to driver author name */
  220. #define AHIDB_Copyright        (AHI_TagBase+119)    /* Pointer to driver copyright notice */
  221. #define AHIDB_Version        (AHI_TagBase+120)    /* Pointer to driver version string */
  222. #define AHIDB_Annotation    (AHI_TagBase+121)    /* Pointer to driver annotation text */
  223. #define AHIDB_BufferLen        (AHI_TagBase+122)    /* Specifies the string buffer size */
  224. #define AHIDB_IndexArg        (AHI_TagBase+123)    /* ti_Data is frequency! */
  225. #define AHIDB_Index        (AHI_TagBase+124)
  226. #define AHIDB_Realtime        (AHI_TagBase+125)    /* Boolean */
  227. #define AHIDB_MaxPlaySamples    (AHI_TagBase+126)    /* It's sample *frames* */
  228. #define AHIDB_MaxRecordSamples    (AHI_TagBase+127)    /* It's sample *frames* */
  229. #define AHIDB_FullDuplex    (AHI_TagBase+129)    /* Boolean */
  230. /* --- New for V2, they will be ignored by V1 --- */
  231. #define AHIDB_MinMonitorVolume    (AHI_TagBase+130)
  232. #define AHIDB_MaxMonitorVolume    (AHI_TagBase+131)
  233. #define AHIDB_MinInputGain    (AHI_TagBase+132)
  234. #define AHIDB_MaxInputGain    (AHI_TagBase+133)
  235. #define AHIDB_MinOutputVolume    (AHI_TagBase+134)
  236. #define AHIDB_MaxOutputVolume    (AHI_TagBase+135)
  237. #define AHIDB_Inputs        (AHI_TagBase+136)
  238. #define AHIDB_InputArg        (AHI_TagBase+137)    /* ti_Data is input index */
  239. #define AHIDB_Input        (AHI_TagBase+138)
  240. #define AHIDB_Outputs        (AHI_TagBase+139)
  241. #define AHIDB_OutputArg        (AHI_TagBase+140)    /* ti_Data is input index */
  242. #define AHIDB_Output        (AHI_TagBase+141)
  243. /* --- New for V4, they will be ignored by V2 and earlier --- */
  244. #define AHIDB_Data        (AHI_TagBaseR+142)    /* Private! */
  245.  
  246.  /* AHI_BestAudioIDA tags */
  247. /* --- New for V4, they will be ignored by V2 and earlier --- */
  248. #define AHIB_Dizzy        (AHI_TagBase+190)
  249.  
  250.  /* AHI_AudioRequestA tags */
  251.     /* Window control */
  252. #define AHIR_Window        (AHI_TagBase+200)    /* Parent window */
  253. #define AHIR_Screen        (AHI_TagBase+201)    /* Screen to open on if no window */
  254. #define AHIR_PubScreenName    (AHI_TagBase+202)    /* Name of public screen */
  255. #define AHIR_PrivateIDCMP    (AHI_TagBase+203)    /* Allocate private IDCMP? */
  256. #define AHIR_IntuiMsgFunc    (AHI_TagBase+204)    /* Function to handle IntuiMessages */
  257. #define AHIR_SleepWindow    (AHI_TagBase+205)    /* Block input in AHIR_Window? */
  258. #define AHIR_UserData        (AHI_TagBase+206)    /* What to put in ahiam_UserData */
  259.     /* Text display */
  260. #define AHIR_TextAttr        (AHI_TagBase+220)    /* Text font to use for gadget text */
  261. #define AHIR_Locale        (AHI_TagBase+221)    /* Locale to use for text */
  262. #define AHIR_TitleText        (AHI_TagBase+222)    /* Title of requester */
  263. #define AHIR_PositiveText    (AHI_TagBase+223)    /* Positive gadget text */
  264. #define AHIR_NegativeText    (AHI_TagBase+224)    /* Negative gadget text */
  265.     /* Initial settings */
  266. #define AHIR_InitialLeftEdge    (AHI_TagBase+240)    /* Initial requester coordinates */
  267. #define AHIR_InitialTopEdge    (AHI_TagBase+241)
  268. #define AHIR_InitialWidth    (AHI_TagBase+242)    /* Initial requester dimensions */
  269. #define AHIR_InitialHeight    (AHI_TagBase+243)
  270. #define AHIR_InitialAudioID    (AHI_TagBase+244)    /* Initial audio mode id */
  271. #define AHIR_InitialMixFreq    (AHI_TagBase+245)    /* Initial mixing/sampling frequency */
  272. #define AHIR_InitialInfoOpened    (AHI_TagBase+246)    /* Info window initially opened? */
  273. #define AHIR_InitialInfoLeftEdge (AHI_TagBase+247)    /* Initial Info window coords. */
  274. #define AHIR_InitialInfoTopEdge (AHI_TagBase+248)
  275. #define AHIR_InitialInfoWidth    (AHI_TagBase+249)    /* Not used! */
  276. #define AHIR_InitialInfoHeight    (AHI_TagBase+250)    /* Not used! */
  277.     /* Options */
  278. #define AHIR_DoMixFreq        (AHI_TagBase+260)    /* Allow selection of mixing frequency? */
  279. #define AHIR_DoDefaultMode    (AHI_TagBase+261)    /* Allow selection of default mode? (V4) */
  280.     /* Filtering */
  281. #define AHIR_FilterTags        (AHI_TagBase+270)    /* Pointer to filter taglist */
  282. #define AHIR_FilterFunc        (AHI_TagBase+271)    /* Function to filter mode id's */
  283.  
  284. /*** DEFS */
  285.  
  286. #define AHINAME            "ahi.device"
  287. #define AHI_INVALID_ID        (~0UL)            /* Invalid Audio ID */
  288. #define AHI_DEFAULT_ID        (0x00000000UL)        /* Only for AHI_AllocAudioA()! */
  289. #define AHI_LOOPBACK_ID        (0x00000001UL)        /* Special sample render Audio ID */
  290. #define AHI_DEFAULT_FREQ    (0UL)            /* Only for AHI_AllocAudioA()! */
  291. #define AHI_MIXFREQ        (~0UL)            /* Special frequency for AHI_SetFreq() */
  292. #define AHI_NOSOUND        (0xffffU)        /* Turns a channel off */
  293.  
  294.  /* Set#? Flags */
  295. #define AHISF_IMM        (1UL<<0)    /* Trigger action immediately    */
  296. #define AHISF_NODELAY        (1UL<<1)    /* Don't wait for zero-crossing */
  297.  
  298. #define AHISF_NONE        (0UL)        /* No flags (V5)        */
  299.  
  300. #define AHISB_IMM        (0UL)
  301. #define AHISB_NODELAY        (1UL)
  302.  
  303.  /* Effect Types */
  304. #define AHIET_CANCEL        (1UL<<31)        /* OR with effect to disable */
  305. #define AHIET_MASTERVOLUME    (1UL)
  306. #define AHIET_OUTPUTBUFFER    (2UL)
  307. /* --- New for V4 --- */
  308. #define AHIET_DSPMASK        (3UL)
  309. #define AHIET_DSPECHO        (4UL)
  310. #define AHIET_CHANNELINFO    (5UL)
  311.  
  312.  /* Sound Types */
  313. #define AHIST_NOTYPE        (~0UL)            /* Private */
  314. #define AHIST_SAMPLE        (0UL)            /* 8 or 16 bit sample */
  315. #define AHIST_DYNAMICSAMPLE    (1UL)            /* Dynamic sample */
  316. #define AHIST_INPUT        (1UL<<29)        /* The input from your sampler */
  317. #define AHIST_BW        (1UL<<30)        /* Private */
  318.  
  319.  /* Sample types */
  320. /* Note that only AHIST_M8S, AHIST_S8S, AHIST_M16S and AHIST_S16S
  321.    are supported by AHI_LoadSound(). */
  322. #define AHIST_M8S        (0UL)            /* Mono, 8 bit signed (BYTE) */
  323. #define AHIST_M16S        (1UL)            /* Mono, 16 bit signed (WORD) */
  324. #define AHIST_S8S        (2UL)            /* Stereo, 8 bit signed (2×BYTE) */
  325. #define AHIST_S16S        (3UL)            /* Stereo, 16 bit signed (2×WORD) */
  326. #define AHIST_M32S        (8UL)            /* Mono, 32 bit signed (LONG) */
  327. #define AHIST_S32S        (10UL)            /* Stereo, 32 bit signed (2×LONG) */
  328.  
  329. #define AHIST_M8U        (4UL)            /* OBSOLETE! */
  330.  
  331.  /* Error codes */
  332. #define AHIE_OK            (0UL)            /* No error */
  333. #define AHIE_NOMEM        (1UL)            /* Out of memory */
  334. #define AHIE_BADSOUNDTYPE    (2UL)            /* Unknown sound type */
  335. #define AHIE_BADSAMPLETYPE    (3UL)            /* Unknown/unsupported sample type */
  336. #define AHIE_ABORTED        (4UL)            /* User-triggered abortion */
  337. #define AHIE_UNKNOWN        (5UL)            /* Error, but unknown */
  338. #define AHIE_HALFDUPLEX        (6UL)            /* CMD_WRITE/CMD_READ failure */
  339.  
  340.  
  341.  
  342. /* DEVICE INTERFACE DEFINITIONS FOLLOWS ************************************/
  343.  
  344.  /* Device units */
  345.  
  346. #define AHI_DEFAULT_UNIT    (0U)
  347. #define AHI_NO_UNIT        (255U)
  348.  
  349.  
  350.  /* The preference file */
  351.  
  352. #define ID_AHIU MAKE_ID('A','H','I','U')
  353. #define ID_AHIG MAKE_ID('A','H','I','G')
  354.  
  355. struct AHIUnitPrefs
  356. {
  357.     UBYTE    ahiup_Unit;
  358.         UBYTE    ahiup_Pad;
  359.         UWORD    ahiup_Channels;
  360.         ULONG    ahiup_AudioMode;
  361.         ULONG    ahiup_Frequency;
  362.         Fixed    ahiup_MonitorVolume;
  363.         Fixed    ahiup_InputGain;
  364.         Fixed    ahiup_OutputVolume;
  365.         ULONG    ahiup_Input;
  366.         ULONG    ahiup_Output;
  367. };
  368.  
  369. struct AHIGlobalPrefs
  370. {
  371.     UWORD    ahigp_DebugLevel;            /* Range: 0-3 (for None, Low,
  372.                                High and All) */
  373.     BOOL    ahigp_DisableSurround;
  374.     BOOL    ahigp_DisableEcho;
  375.     BOOL    ahigp_FastEcho;
  376.     Fixed    ahigp_MaxCPU;
  377.     BOOL    ahigp_ClipMasterVolume;
  378.     Fixed    ahigp_AntiClickTime;            /* (V5) */
  379. };
  380.  
  381.  /* Debug levels */
  382. #define AHI_DEBUG_NONE        (0U)
  383. #define AHI_DEBUG_LOW        (1U)
  384. #define AHI_DEBUG_HIGH        (2U)
  385. #define AHI_DEBUG_ALL        (3U)
  386.  
  387.  /* AHIRequest */
  388.  
  389. struct AHIRequest
  390. {
  391.     struct    IOStdReq     ahir_Std;        /* Standard IO request */
  392.     UWORD             ahir_Version;        /* Needed version */
  393. /* --- New for V4, they will be ignored by V2 and earlier --- */
  394.     UWORD             ahir_Pad1;
  395.     ULONG             ahir_Private[2];    /* Hands off! */
  396.     ULONG             ahir_Type;        /* Sample format */
  397.     ULONG             ahir_Frequency;    /* Sample/Record frequency */
  398.     Fixed             ahir_Volume;        /* Sample volume */
  399.     Fixed             ahir_Position;        /* Stereo position */
  400.     struct AHIRequest     *ahir_Link;        /* For double buffering */
  401. };
  402.  
  403.  /* Flags for OpenDevice() */
  404.  
  405. #define    AHIDF_NOMODESCAN    (1UL<<0)
  406. #define    AHIDB_NOMODESCAN    (0UL)
  407.  
  408. #endif /* DEVICES_AHI_H */
  409.