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