home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / mmpm21tk.zip / TK / H / AUDIO.H < prev    next >
C/C++ Source or Header  |  1993-03-29  |  16KB  |  457 lines

  1. /****************************************************************************/
  2. /*                                                                          */
  3. /* Module Name: AUDIO.H                                                     */
  4. /*                                                                          */
  5. /* OS/2 2.0 Multimedia Extensions Audio Structures and definitions.         */
  6. /*                                                                          */
  7. /* Copyright (c) International Business Machines Corporation 1991, 1992     */
  8. /*                        All Rights Reserved                               */
  9. /*                                                                          */
  10. /****************************************************************************/
  11.  
  12. /*-------------------------------------------------------------------------*
  13. * AUDIODD version level
  14. *-------------------------------------------------------------------------*/
  15.  
  16. #define CURRENT_VERSION  0x01020000
  17.  
  18. /*-------------------------------------------------------------------------*
  19. * ACPA control definitions
  20. *-------------------------------------------------------------------------*/
  21.  
  22. #define AUDIO_IOCTL_CAT   0x80
  23.  
  24. #define AUDIO_INIT        0x40
  25. #define AUDIO_STATUS      0x41
  26. #define AUDIO_CONTROL     0x42
  27. #define AUDIO_BUFFER      0x43
  28. #define AUDIO_LOAD        0x44
  29. #define AUDIO_WAIT        0x45
  30. #define AUDIO_HPI         0x46
  31.  
  32. /*-------------------------------------------------------------------------*
  33. * AUDIO_INIT declarations and defines
  34. *-------------------------------------------------------------------------*/
  35.  
  36. #define LOAD_PATH       260
  37.  
  38. /* Values for AUDIO_INIT.sMode  */
  39.  
  40. #define  ADPCM    1                       /* AVC type ADPCM                */
  41. #define  PCM      2                       /* Pulse Coded Modulation        */
  42. #define  MU_LAW   3                       /* mu-law                        */
  43. #define  MIDI     4                       /* MIDI data                     */
  44. #define  A_LAW    5                       /* a-law                         */
  45. #define  SOURCE_MIX 6                     /* External audio source         */
  46. #define  SPV2     7                       /* Speech Viewer/2               */
  47. #define  ADPCMXA  8                       /* XA CD ROM                     */
  48. #define  SPV2BCPCM      25                /* Speech Viewer/2               */
  49. #define  SPV2PCM        26
  50. #define  SPV2NONE       27
  51. #define  IDLE           999
  52. #define  CLAIM_HDWR 32000                 /* Serialize access to hardware  */
  53.  
  54. /* Values for AUDIO_INIT.ulFlags        */
  55.  
  56. #define  FIXED             0x00000001l    /* Fixed length data             */
  57. #define  LEFT_ALIGNED      0x00000002l    /* Left align bits on byte bndry */
  58. #define  RIGHT_ALIGNED     0x00000004l    /* Right align bits on byte bndry*/
  59. #define  TWOS_COMPLEMENT   0x00000008l    /* 2's complement data           */
  60. #define  SIGNED            0x00000010l    /* Signed data                   */
  61. #define  BIG_ENDIAN        0x00000020l    /* MSB's first (motorola format) */
  62. #define  PITCH             0x00100000l    /* Pitch control is supported    */
  63. #define  INPUT             0x00200000l    /* Input select is supported     */
  64. #define  OUTPUT            0x00400000l    /* Output select is supported    */
  65. #define  MONITOR           0x00800000l    /* Monitor is supported          */
  66. #define  VOLUME            0x01000000l    /* Volume control is supported   */
  67. #define  VOLUME_DELAY      0x02000000l    /* Volume delay is supported     */
  68. #define  BALANCE           0x04000000l    /* Balance control is supported  */
  69. #define  BALANCE_DELAY     0x08000000l    /* Balance delay is supported    */
  70. #define  TREBLE            0x10000000l    /* Treble control is supported   */
  71. #define  BASS              0x20000000l    /* Bass control supported        */
  72. #define  BESTFIT_PROVIDED  0x40000000l    /* bestfit returned              */
  73. #define  LOAD_CODE         0x80000000l    /* DSP load needed               */
  74.  
  75. /* Values for AUDIO_INIT.ulOperation    */
  76.  
  77. #define OPERATION_PLAY     1
  78. #define OPERATION_RECORD   2
  79. #define PLAY_AND_RECORD    3
  80. #define  ANALYSIS          6              /* Speech Viewer/2               */
  81. #define  DISTANCE          7              /* Speech Viewer/2               */
  82. #define  MIGRATION         8              /* Speech Viewer/2               */
  83.  
  84. /* Values for AUDIO_INIT.sReturnCode    */
  85.  
  86. #define NO_PLAY                 1
  87. #define NO_RECORD               2
  88. #define NO_RECORD_AND_PLAY      3
  89. #define INVALID_REQUEST         4
  90. #define CONFLICT                5
  91. #define OVERLOADED              6
  92. #define  DOWNLEVEL_DD                  7  /* DD is down level from appl.   */
  93. #define  DSP_LOAD_PENDING_ON_OTHER_TRK 8  /* Other trk hasn't loaded dsp   */
  94.  
  95. #define AUDIO_IGNORE                    -1
  96.  
  97. /* Values for AUDIO_INIT.sDeviceID      */
  98.  
  99. #define MINIDD                                  0
  100. #define ACPA                    1
  101. #define MACPA                   2
  102. #define MPU401                  3
  103. #define SOUND_BLASTER           4
  104. #define IMF                     5
  105. #define PS1                     6
  106. #define PAS16           7
  107.  
  108. /* XLATOFF */
  109. #pragma pack(1)
  110. /* XLATON */
  111.  
  112. /* AUDIO_INIT structure declaration     */
  113.  
  114. typedef struct _init {  /* init */
  115.         LONG lSRate;
  116.         LONG lBitsPerSRate;
  117.         LONG lBsize;
  118.         SHORT sMode;
  119.         SHORT sChannels;
  120.         LONG lResolution;
  121.         CHAR abLoadPath[LOAD_PATH];
  122.         ULONG ulFlags;
  123.         ULONG ulOperation;
  124.         SHORT sReturnCode;
  125.         SHORT sSlotNumber;
  126.         SHORT sDeviceID;
  127.         VOID FAR *pvReserved;       /* MMPM2 uses this to pass back sysfilenum */
  128.         ULONG ulVersionLevel;
  129.         } MCI_AUDIO_INIT;
  130.  
  131. typedef MCI_AUDIO_INIT FAR *LPMCI_AUDIO_INIT;
  132.  
  133. /*-------------------------------------------------------------------------*
  134. * AUDIO_DEVID declarations and defines
  135. *-------------------------------------------------------------------------*/
  136.  
  137. typedef struct _MCI_AUDIO_DEVID { /* devid */
  138.         ULONG ulDevType;
  139.         ULONG ulDevNum;
  140.         } MCI_AUDIO_DEVID;
  141.  
  142. typedef MCI_AUDIO_DEVID FAR *LPMCI_AUDIO_DEVID;
  143.  
  144. /* Input devices        */
  145.  
  146. #define  NULL_INPUT           0
  147. #define  STEREO_LINE_INPUT    1
  148. #define  LEFT_LINE_INPUT      2
  149. #define  RIGHT_LINE_INPUT     3
  150. #define  MIC_INPUT            4
  151. #define  BOOSTED_MIC_INPUT    5
  152. #define  PHONE_LINE_INPUT     6
  153. #define  HANDSET_INPUT        7
  154. #define  SYNTH_INPUT          8
  155. #define  DIGITAL_PHONE_LINE_INPUT 9
  156. #define  DIGITAL_HANDSET_INPUT 10
  157. #define  MIDI_IN_PORT         11
  158. #define  LOOPBACK             11
  159. #define  DEFAULT_INPUT        0XFFFFFFFF
  160.  
  161. /* Output devices       */
  162.  
  163. #define  NULL_OUTPUT          0
  164. #define  STEREO_LINE_OUTPUT   1
  165. #define  LEFT_LINE_OUTPUT     2
  166. #define  RIGHT_LINE_OUTPUT    3
  167. #define  SPEAKER_OUTPUT       4
  168. #define  HEADSET_OUTPUT       5
  169. #define  PHONE_LINE_OUTPUT    6
  170. #define  HANDSET_OUTPUT       7
  171. #define  SYNTH_OUTPUT         8
  172. #define  DIGITAL_PHONE_LINE_OUTPUT 9
  173. #define  DIGITAL_HANDSET_OUTPUT 10
  174. #define  MIDI_OUT_PORT         11
  175. #define  DEFAULT_OUTPUT        0XFFFFFFFF
  176.  
  177. /* Defined values for DevNum    */
  178.  
  179. #define  DEFAULT_DEVICE       0
  180. #define  DEVICE_1             1
  181. #define  DEVICE_2             2
  182.  
  183. /*-------------------------------------------------------------------------*
  184. * AUDIO_CHANGE declarations and defines
  185. *-------------------------------------------------------------------------*/
  186.  
  187. /* Values for AUDIO_CHANGE.lMonitor     */
  188.  
  189. #define MONITOR_OFF                     0
  190. #define MONITOR_UNCOMPRESSED    1
  191. #define MONITOR_COMPRESSED              2
  192.  
  193. /* Values for AUDIO_CHANGE.lInput       */
  194.  
  195. #define HIGH_GAIN_MIC           0
  196. #define LINE_1                  1
  197. #define LINE_2                  2
  198. #define LINES_1AND2             3
  199. #define LOW_GAIN_MIC            4
  200. #define ALL_LINES               0xFFFF
  201. #define INPUTS_LISTED                   0x5555
  202.  
  203. /* Values for AUDIO_CHANGE.lOutput      */
  204.  
  205. #define EXTERNAL_SPEAKER        1
  206. #define INTERNAL_SPEAKER        2
  207. #define OUTPUT_1                                4
  208. #define OUTPUTS_LISTED                  0x5555
  209.  
  210. /* AUDIO_CHANGE structure declaration   */
  211.  
  212. typedef struct _MCI_AUDIO_CHANGE {  /* chang */
  213.         VOID FAR *pvDevInfo;
  214.         LONG lInput;
  215.         LONG lOutput;
  216.         LONG lMonitor;
  217.         LONG lVolume;
  218.         LONG lVolumeDelay;
  219.         LONG lBalance;
  220.         LONG lBalanceDelay;
  221.         LONG lTreble;
  222.         LONG lBass;
  223.         LONG lPitch;
  224.         MCI_AUDIO_DEVID rInputList[8];
  225.         MCI_AUDIO_DEVID rOutputList[8];
  226.  
  227.         LPMCI_AUDIO_DEVID prMoreInputs;
  228.         LPMCI_AUDIO_DEVID prMoreOutputs;
  229.         LONG lGain;
  230.         VOID FAR *pvModeInfo;
  231.         } MCI_AUDIO_CHANGE;
  232.  
  233. typedef MCI_AUDIO_CHANGE FAR *LPMCI_AUDIO_CHANGE;
  234.  
  235.  
  236. typedef struct _mode_info { /* mode_info */
  237.       SHORT    sTempo;
  238.       SHORT    sCPQN;
  239.       SHORT    sMidiSwitches;
  240.       SHORT    sReserved[5];
  241.       } MIDI_INFO;
  242.  
  243. /*************************************************************************
  244. *  MIDI Switches
  245. ***************************************************************************/
  246. #define  MIDI_THRU_THRU 0
  247. #define  MIDI_THRU_OUT  1
  248.  
  249.  
  250. /*-------------------------------------------------------------------------*
  251. * AUDIO_STATUS declarations and defines
  252. *-------------------------------------------------------------------------*/
  253.  
  254. /* Values for AUDIO_STATUS.ulOperation  */
  255.  
  256. #define STOPPED                 0
  257. #define PLAYING                 1
  258. #define RECORDING               2
  259. #define PLAYING_AND_RECORDING   3
  260. #define UNITIALIZED             0xFFFFFFFF
  261.  
  262. /* AUDIO_STATUS structure declaration   */
  263.  
  264. typedef struct _status {  /* status */
  265.         LONG lSRate;
  266.         LONG lBitsPerSRate;
  267.         LONG lBsize;
  268.         SHORT sMode;
  269.         SHORT sChannels;
  270.         ULONG ulFlags;
  271.         ULONG ulOperation;
  272.         MCI_AUDIO_CHANGE rAudioChange;
  273.         } MCI_AUDIO_STATUS;
  274.  
  275. typedef MCI_AUDIO_STATUS FAR *LPMCI_AUDIO_STATUS;
  276.  
  277. /*-------------------------------------------------------------------------*
  278. * AUDIO_CONTROL declarations and defines
  279. *-------------------------------------------------------------------------*/
  280.  
  281. /* Values for AUDIO_CONTROL.usIOCtlRequest      */
  282.  
  283. #define AUDIO_CHANGE            0
  284. #define AUDIO_START             1
  285. #define AUDIO_STOP              2
  286. #define AUDIO_PAUSE             3
  287. #define AUDIO_RESUME            4
  288.  
  289. /* Values for AUDIO_CONTROL.sReturnCode */
  290.  
  291. #define  AC_UNINITED          1       /* Device must be init'ed or loaded first    */
  292. #define  FULL_QUEUE           2       /* Maximum # requests exceeded        */
  293. #define  AC_UNPAUSED          3       /* Resume issued, but dev not paused  */
  294. #define  INVALID_REQUEST      4       /* bad audio_control.ioctl_request    */
  295. #define  AC_UNSTARTED         5       /* Device must be started first       */
  296. #define  INVALID_INPUT_LIST   7       /* invalid change.input_list entry    */
  297. #define  INVALID_OUTPUT_LIST  8       /* invalid change.output_list entry   */
  298.  
  299. /* AUDIO_CONTROL structure declaration  */
  300.  
  301. typedef struct _contr {  /* contr */
  302.         USHORT usIOCtlRequest;
  303.         VOID FAR *pbRequestInfo;
  304.         ULONG ulPosition;
  305.         SHORT sReturnCode;
  306.         } MCI_AUDIO_CONTROL;
  307.  
  308. typedef MCI_AUDIO_CONTROL FAR *LPMCI_AUDIO_CONTROL;
  309.  
  310. /*-------------------------------------------------------------------------*
  311. * AUDIO_BUFFER declarations and defines
  312. *-------------------------------------------------------------------------*/
  313.  
  314. /* Values for AUDIO_BUFFER.ulFlags      */
  315.  
  316. #define AUDIO_UNDERRUN  1
  317. #define AUDIO_OVERRUN   2
  318.  
  319. /* Values for AUDIO_BUFFER.ulPositionType       */
  320.  
  321. #define POS_MSECS       0
  322. #define MIDI_CLOCKS     1
  323. #define SMPTE_24       24
  324. #define SMPTE_25       25
  325. #define SMPTE_30DF     29
  326. #define SMPTE_30       30
  327.  
  328. typedef struct _buffer {  /* buffer */
  329.         ULONG ulFlags;
  330.         ULONG ulReadBufSize;
  331.         ULONG ulWriteBufSize;
  332.         ULONG ulReadBufTime;
  333.         ULONG ulWriteBufTime;
  334.         ULONG ulReadBufMax;
  335.         ULONG ulWriteBufMax;
  336.         ULONG ulPosition;
  337.         ULONG ulPositionType;
  338.         LONG lReadBufCap;
  339.         LONG lWriteBufCap;
  340.         LONG lRequestBufCap;
  341.         } MCI_AUDIO_BUFFER;
  342.  
  343. typedef MCI_AUDIO_BUFFER FAR *LPMCI_AUDIO_BUFFER;
  344.  
  345. /*-------------------------------------------------------------------------*
  346. * AUDIO_LOAD declarations and defines
  347. *-------------------------------------------------------------------------*/
  348.  
  349. /* Values for AUDIO_LOAD.ulFlags        */
  350.  
  351. #define LOAD_START              0x01
  352. #define LOAD_END                0x02
  353. #define LOAD_32BIT              0x10
  354.  
  355. typedef struct _load {  /* load */
  356.         CHAR FAR *pbBuffer;
  357.         ULONG ulSize;
  358.         ULONG ulFlags;
  359.         } MCI_AUDIO_LOAD;
  360.  
  361. typedef MCI_AUDIO_LOAD FAR *LPMCI_AUDIO_LOAD;
  362.  
  363. /*-------------------------------------------------------------------------*
  364. * Track info declarations and defines
  365. *-------------------------------------------------------------------------*/
  366.  
  367. /* Track Info structure declaration     */
  368.  
  369. typedef struct _info {  /* info */
  370.         USHORT usMasterVolume;
  371.         USHORT usDitherPct;             /* Percent of a bit dither during record  */
  372.         USHORT usMasterVolumeDelay;
  373.         USHORT usMasterBalance;
  374.         USHORT usMasterBalanceDelay;
  375.         } MCI_TRACK_INFO;
  376.  
  377. typedef MCI_TRACK_INFO FAR *LPMCI_TRACK_INFO;
  378.  
  379.  
  380. /*-------------------------------------------------------------------------*
  381. * IOBUFFER declarations and defines
  382. *-------------------------------------------------------------------------*/
  383.  
  384. #define STARTED  1
  385. #define PAUSED   2
  386.  
  387. typedef struct _MCI_AUDIO_IOBUFFER {  /* iobuffer */
  388.         ULONG lSize;
  389.         CHAR FAR *pHead;
  390.         CHAR FAR *pTail;
  391.         LONG lCount;
  392.         ULONG ulPosition;
  393.         LONG lDelay;
  394.         USHORT usRunFlags;
  395.         USHORT usSelInc;
  396.         CHAR FAR *pBuffer;
  397.         } MCI_AUDIO_IOBUFFER;
  398.  
  399. typedef MCI_AUDIO_IOBUFFER FAR *LPMCI_AUDIO_IOBUFFER;
  400.  
  401. /*-------------------------------------------------------------------------*
  402. * AUDIO_HPI declarations and defines
  403. *-------------------------------------------------------------------------*/
  404.  
  405. #define CBXMIT  1
  406. #define CBREC   2
  407. #define CRTIMER 4
  408.  
  409. #define EP_OPEN         0
  410. #define EP_CLOSE        1
  411. #define EP_READ         2
  412. #define EP_WRITE        3
  413. #define EP_INIT         4
  414. #define EP_STATUS       5
  415. #define EP_CONTROL      6
  416. #define EP_BUFFER       7
  417. #define EP_LOAD         8
  418. #define EP_WAIT         9
  419.  
  420.  
  421. typedef struct _hpi {  /* hpi */
  422.         VOID (FAR *pvEntry)();
  423.         VOID (FAR *pvCallBack)();
  424.         LPMCI_AUDIO_IOBUFFER prXBuff;
  425.         LPMCI_AUDIO_IOBUFFER prRBuff;
  426.         USHORT usFlags;
  427.         } MCI_AUDIO_HPI;
  428.  
  429. typedef MCI_AUDIO_HPI FAR *LPMCI_AUDIO_HPI;
  430.  
  431. /**************************/
  432. /* AUDIO_UPDATE Structure */
  433. /**************************/
  434. typedef struct _audio_update { /* update */
  435.  
  436.   CHAR iobuf_type;              /* 0 - XMITIO, 1 - RECIO to be updated      */
  437.   CHAR FAR *buffer_address;     /* address to buffer to be added to array   */
  438.   ULONG buffer_length;          /* length of buffer to be added             */
  439.   USHORT rc;                    /* return code                              */
  440.   void FAR *reserved;           /* future use                               */
  441.   };
  442.  
  443. typedef struct audio_update FAR *UPDATE;
  444.  
  445. /* audio_update.iobuf_type definitions                                      */
  446. #define  XMIT_IOBUF 0
  447. #define  REC_IOBUF  1
  448.  
  449. /* audio_update.rc definitions                                              */
  450. #define  MAX_NUM_BUFFERS_REACHED 9
  451. #define  UPDATE_GENERAL_FAILURE  10
  452. #define  INVALID_BUFFER_LENGTH   11
  453.  
  454. /* XLATOFF */
  455. #pragma pack()
  456. /* XLATON */
  457.