home *** CD-ROM | disk | FTP | other *** search
/ Audio 4.94 - Over 11,000 Files / audio-11000.iso / msdos / sndbords / proaudio / pasw14b1 / mmmixer.h < prev    next >
Text File  |  1992-07-10  |  15KB  |  361 lines

  1. /***************************************************************************\
  2. *                                                                                                     *
  3. *    Multimedia Mixer Software Development Kit Include File                         *
  4. *                                                                                                      *
  5. *    Copyright (c) MediaVision Corporation 1991. All rights reserved             *
  6. *                                                                                                      *
  7. *                                                                                                     *
  8. \***************************************************************************/
  9.  
  10.  
  11. ///////////////////////////////////////////////////////////////////////////
  12. // MIXERSTATE: 
  13. // this structure maintains the current state of a mixer
  14. //
  15.  
  16. #define MIXSTATEVER                0x101                
  17. #define MAX_INPUTS    8                    // Version 1 maximum inputs
  18. #define MAX_OUTPUTS    2                    // Version 1 maximum outputs
  19.  
  20.  
  21. typedef struct linestatus_tag {
  22.    WORD  wNumber;                    // This line's ordinal number in the mixer
  23.    WORD  wNumSoftPatches;          // number of software patches available
  24.    WORD  wPatchNumber;                // the number of the patch currently in use
  25.    WORD  wNumChannels;             // number of channels (1=mono, 2=stereo)
  26.    WORD  wDeviceNumber;          // range (0-xxxGetNumDevs()) if appropriate
  27.     WORD    wReserved;
  28.    DWORD dwDeviceType;                // type of device patched to the input
  29.    DWORD dwConnections;                // show lines connected
  30.    DWORD dwSupport;               // supported functionality (MIXLINEINFO)
  31.    DWORD    dwAssociation;               // HIWORD=type, LOWORD=device
  32.  
  33.     DWORD dwVolume;                       // volume control
  34.     DWORD dwAutoLevel;                // Auto Level Control
  35.     DWORD dwBMT;                      // B-M-T equalization
  36.     DWORD dwCrossover;              // crossover
  37.     DWORD dwLoudness;                 // loudness equalization
  38.     DWORD dwMute;                      // silence switch
  39.     DWORD dwReverb;                   // reverb
  40.     DWORD dwStereoEnhance;           // stereo enhance
  41.     DWORD dwCustom1;                    // custom effect #1
  42.     DWORD dwCustom2;                    // custom effect #2
  43.     DWORD dwCustom3;                    // custom effect #3
  44.     DWORD dwConnectionsPossible;
  45.     DWORD dwReserved2;                      
  46.  
  47.    char  szIOname[MAXPNAMELEN]; // line name 
  48.    char  szPname[MAXPNAMELEN];  // patch name
  49.     } LINESTATUS;
  50. typedef LINESTATUS FAR *LPLINESTATUS;
  51.  
  52. /// The MIXERSTATE structure is subject to change.
  53. /// Drivers should detect version number changes and
  54. /// act accordingly.
  55. ///
  56.  
  57.  
  58. typedef struct MVmixer_tag {
  59.     WORD    wSize;
  60.     WORD    wVersion;
  61.    WORD  wMid;                                       // KFN 7/91 manufacturer id
  62.    WORD  wPid;                                      // KFN 7/91 product id
  63.     WORD    wMixerNumber;
  64.     WORD    wNumInputs;                                      // define's array sizes
  65.     WORD    wNumOutputs;
  66.  
  67.     LINESTATUS LineInStatus[MAX_INPUTS];
  68.     LINESTATUS LineOutStatus[MAX_OUTPUTS];
  69.  
  70. } MIXERSTATE;
  71. typedef MIXERSTATE FAR *LPMIXERSTATE;
  72.  
  73. // MIXERSTATE NOTE: 
  74. // Version 1.01: added manufacturer and product ID numbers for use in 
  75. //                   identifying creator of mixer state when stored in a file.
  76.  
  77.  
  78. ///////////////////////////////////////////////////////////////////////////
  79.  
  80.  
  81. typedef WORD     HMIXER;
  82. typedef HMIXER FAR *LPHMIXER;
  83.  
  84.  
  85. #define BASS(dwValue)    (LOBYTE(HIWORD(dwValue)))
  86. #define MIDR(dwValue)    (HIBYTE(LOWORD(dwValue)))
  87. #define TREB(dwValue)    (LOBYTE(LOWORD(dwValue)))
  88.  
  89. typedef struct mixercaps_tag {
  90.     WORD    wMid;                  // manufacturer id
  91.     WORD    wPid;                  // product id
  92.     VERSION vDriverVersion;        // version of the driver
  93.     char    szPname[MAXPNAMELEN];  // product name (NULL terminated string)
  94.     WORD    wInputs;                     // number of inputs  supported.
  95.     WORD    wOutputs;               // number of outputs supported.
  96.     WORD    wNumInputPatches;         // number of input patches supported.
  97.     WORD    wNumOutputPatches;      // number of output patches supported.
  98.     DWORD   dwSupport;               // supported functionality
  99.     DWORD   dwReserved;     
  100. } MIXERCAPS;
  101. typedef MIXERCAPS FAR *LPMIXERCAPS;
  102.  
  103. #define MIXERCAP_SOFTPATCHSWITCH        0x0001    // supports some software patching
  104. #define MIXERCAP_MANUALPATCHSWITCH    0x0002    // supports some manual   patching
  105.  
  106. typedef struct mixerlineinfo_tag {
  107.     WORD    wNumber;              // This line's ordinal number in the mixer
  108.     DWORD   dwDeviceType;       // type of device patched to the input
  109.     WORD    wNumSoftPatches;    // number of software patches available
  110.     WORD    wPatchNumber;       // number of device currently patched 
  111.     WORD    wNumChannels;       // number of channels on input 
  112.                                        // (1=mono, 2=stereo)
  113.     DWORD   dwSupport;               // supported functionality (MIXLINEINFO)
  114.     DWORD    dwAssociation;               // HIWORD=type, LOWORD=device
  115.     DWORD   dwConnectionsPossible; // lines connectable to
  116.     char    szIOname[MAXPNAMELEN]; // input name (eg "Aux Connector"
  117.     char    szPname[MAXPNAMELEN];  // patch name (eg "Casio Synthesizer")
  118. } MIXERLINEINFO;
  119. typedef MIXERLINEINFO FAR *LPMIXERLINEINFO;
  120.  
  121.  
  122. typedef struct patchinfo_tag {
  123.     WORD    wPatchNumber;          // This patch's ordinal number in the mixer
  124.     DWORD   dwDeviceType;             // type of device
  125.      DWORD    dwLineNumbers;           // bit-field, lines connectable to
  126.     char    szPname[MAXPNAMELEN];  // patch name (NULL terminated string)
  127.     DWORD    dwAssociation;               // HIWORD=type, LOWORD=device
  128.     DWORD   dwReserved1;                // reserved for future use
  129. } PATCHINFO;
  130. typedef PATCHINFO FAR *LPPATCHINFO;
  131.  
  132.  
  133. typedef struct {
  134.     DWORD dwInputDeviceType;
  135.     DWORD dwOutputDeviceType;
  136.     DWORD dwInputAssociation;
  137.     DWORD dwOutputAssociation;
  138. } DEVICECONNECT;
  139. typedef DEVICECONNECT FAR *LPDEVICECONNECT;
  140.  
  141. typedef struct {
  142.     DWORD     dwDeviceType;                // aka technology
  143.     WORD        wNumDevices;                  // return value: # lines with device found
  144.     DWORD        dwLines;                        // return value: line map
  145.     DWORD        dwAssociation;                // for exclusive search
  146.     } DEVICELINES;
  147. typedef DEVICELINES FAR *LPDEVICELINES;
  148.  
  149. /*
  150.     Prudent Windows programming suggests that we register these
  151.     Window messages:  
  152.         WM_MIX_PATCHCHANGED
  153.         WM_MIX_CONNECTIONCHANGED
  154.         WM_MIX_CONTROLCHANGED
  155.         WM_MIX_MUTESTATUSCHANGED
  156.  
  157.     To handle those messages, you'll need to ask Windows to register them
  158.     with some code that looks like this:
  159.  
  160.     wmPatchChanged=RegisterWindowMessage("WM_MIX_PATCHCHANGED");
  161.     wmConnectionChanged=RegisterWindowMessage("WM_MIX_CONNECTIONCHANGED");
  162.     wmControlChanged=RegisterWindowMessage("WM_MIX_CONTROLCHANGED");
  163.     wmMixStatusChanged=RegisterWindowMessage("WM_MIX_MUTESTATUSCHANGED");
  164.  
  165.     Nope, you can't use 'em in yer case statements.
  166.  
  167.  */
  168.  
  169. // flags for MIXERLINEINFO dwSupport field
  170. #define MIX_SUPPORT_VOLUME          0x00000001   // supports volume control
  171. #define MIX_SUPPORT_LRVOLUME    0x00000002   // separate left-right volume control
  172. #define MIX_SUPPORT_ALC              0x00000004   // supports Auto Level Control
  173. #define MIX_SUPPORT_BMT              0x00000008   // supports B-M-T equalization
  174. #define MIX_SUPPORT_CROSSOVER      0x00000010   // supports crossover change
  175. #define MIX_SUPPORT_LOUDNESS      0x00000020   // supports loudness equalization
  176. #define MIX_SUPPORT_MUTE          0x00000040   // supports channel mute
  177. #define MIX_SUPPORT_REVERB          0x00000080   // supports reverb 
  178. #define MIX_SUPPORT_STEREOENHANCE 0x00000100   // supports stereo enhance 
  179. #define MIX_SUPPORT_CUSTOM1      0x00000200   // supports custom effect #1
  180. #define MIX_SUPPORT_CUSTOM2      0x00000400   // supports custom effect #2
  181. #define MIX_SUPPORT_CUSTOM3      0x00000800   // supports custom effect #3
  182. #define MIX_SUPPORT_SOFTPATCH      0x40000000    // supports software patching 
  183. #define MIX_SUPPORT_MANUALPATCH 0x80000000    // supports manual patching 
  184.  
  185. // PATCH TYPES for MIXERLINEINFO, PATCHINFO
  186.  
  187. #define    MIX_NO_CONNECT              0x00000000  
  188. #define    MIX_CD_AUDIO              0x00000001  // match MMWIN AUXCAPS_XXX defines
  189. #define    MIX_AUXILLARY              0x00000002  // for AUXCAPS wTechnology field
  190. #define    MIX_MICROPHONE              0x00000004
  191. #define    MIX_VIDEOTAPE              0x00000008
  192. #define    MIX_VIDEODISK              0x00000010
  193. #define    MIX_INSTRUMENT              0x00000020
  194. #define    MIX_WAVE                      0x00000040
  195. #define    MIX_TV_TUNER              0x00000080
  196. #define    MIX_RADIO_TUNER          0x00000100
  197. #define    MIX_PHONOGRAPH              0x00000200
  198. #define    MIX_PC_INT_SPKR          0x00000400
  199. #define    MIX_ANALOG_AUDIO_TAPE  0x00000800
  200. #define    MIX_DIGITAL_AUDIO_TAPE 0x00001000
  201. #define    MIX_TELEPHONE              0x00002000
  202. #define    MIX_MIXER                  0x00004000  
  203. #define    MIX_EQUALIZER              0x00008000  
  204. #define    MIX_AMPLIFIER              0x00010000  
  205. #define    MIX_OTHER                  0x08000000
  206. #define    MIX_HARD_WIRED              0x20000000    // hard-wired to one line
  207. #define    MIX_USER_CONNECTED      0x40000000     // requires user to hook it up
  208. #define    MIX_LISTENER              0x80000000    // audio devices that accept input
  209.                                                             // (ie amp, pcm record, etc)
  210.  
  211. // ERROR MESSAGES
  212.  
  213. #define MIXERR_BASE            512
  214.  
  215. #define    MIXERR_NOERR              0    
  216. #define    MIXERR_INVALHANDLE      MIXERR_BASE+0    
  217. #define    MIXERR_INVALINPUT            MIXERR_BASE+1    //     \\\\    contiguous
  218. #define    MIXERR_INVALOUTPUT      MIXERR_BASE+2    //     ////    contiguous
  219. #define    MIXERR_INVALIDSTATE      MIXERR_BASE+3    
  220. #define    MIXERR_INVALPATCH          MIXERR_BASE+4      // out of range or disabled
  221. #define    MIXERR_PATCHMISMATCH      MIXERR_BASE+5    
  222. #define    MIXERR_PATCHINUSE          MIXERR_BASE+6    
  223. #define    MIXERR_NOTSUPPORTED      MIXERR_BASE+7    
  224. #define    MIXERR_FADEINPROGRESS  MIXERR_BASE+8    
  225. #define    MIXERR_INVALCONNECTION MIXERR_BASE+10    
  226. #define    MIXERR_INVALSTRUCTPTR  MIXERR_BASE+11    
  227. #define    MIXERR_BADMIXERPTR     MIXERR_BASE+12    
  228. #define    MIXERR_ILLEGALSIZE     MIXERR_BASE+13    
  229.  
  230. // Association Types
  231. // The association types defined below are base values.  Add 0x0 thru 0xf
  232. // to these base values to indicate the device number that is associated.
  233. // New candidates for association types must fulfill the following criteria:
  234. //
  235. //        1) The device must produce audio output.
  236. //
  237. //        2) The device must be software controllable.
  238. //
  239. //        3) The device must either have a Windows low-level driver
  240. //         or an MCI driver.
  241. //
  242. #define  AT_NO_INFO              0x0000        // No association info available
  243. // low-level drivers
  244. #define  AT_waveOut              0x0010        // internal pcm hardware
  245. #define  AT_midiOut              0x0020        // internal MIDI device
  246. // MCI drivers
  247. #define  AT_mciCD                  0x1010        // internal and external CD devices
  248. #define  AT_mciVDP              0x1020        // external VideoDisk Player
  249. #define  AT_mciSEQ              0x1030        // external MIDI device
  250. #define  AT_mciWAVE              0x1040        // external WAVE  device
  251. #define  AT_mciDAT              0x1050        // external Digital Audio Tape device (it could happen)
  252. #define  AT_mciVCR              0x1060        // Panasonic AG-1960 for example
  253. #define    AT_mciTV                  0x1070        //    TV tuner
  254. #define    AT_mciTUNER                0x1080        // AM/FM tuner 
  255. #define    AT_mciPHONO                0x1090        // we may never live to see such an animal
  256. #define  AT_mciAAT              0x10A0        // external Analog Audio Tape device (it has happened)
  257. #define    AT_mciMIX                0x10B0      // possibility of mixer chaining!
  258. #define    AT_mciEQU              0x10C0        // equalizer controllable by software
  259. #define    MIX_mciAMP              0x10D0        // they exist, only a driver is needed
  260.  
  261. // general mixer macros
  262. #define BOTH    (MIX_SUPPORT_VOLUME|MIX_SUPPORT_LRVOLUME)
  263. #define MONO    1
  264. #define STEREO    2
  265.  
  266. #define MIX_DEVICESHORTNAME 6
  267. #define MIX_FADE_OVERRIDE    1
  268.  
  269. // MIX Messages
  270. #define MM_STATE_FADE_COMPLETED    1
  271.  
  272. // Add to HIBYTE of wLineNum parameters  
  273. // and to the wPatchNum parm of mixGetPatchInfo
  274. #define MIX_INPUT        0
  275. #define MIX_OUTPUT     1
  276.  
  277. // GENERAL FUNCTIONS
  278.  
  279. WORD FAR PASCAL mixGetNumDevs(void);
  280. WORD FAR PASCAL mixGetDevCaps(WORD wDeviceID,LPMIXERCAPS lpCaps,WORD wSize);
  281. WORD FAR PASCAL mixOpen(LPHMIXER lphMixer,WORD wDeviceID,DWORD dwFlags);
  282. WORD FAR PASCAL mixClose(HMIXER hMixer);
  283. WORD FAR PASCAL mixGetErrorText(WORD wError,LPSTR lpText,WORD wSize);
  284.  
  285. // MIXER PRESET FUNCTIONS
  286. WORD FAR PASCAL mixMute(WORD wFlags);
  287. WORD FAR PASCAL mixReset(HMIXER hMixer);
  288. WORD FAR PASCAL mixGetState(HMIXER hMixer,LPMIXERSTATE lpMixer, WORD wSize);
  289. WORD FAR PASCAL mixSetState(HMIXER hMixer,LPMIXERSTATE lpMixer, WORD wSize,DWORD dwTime,DWORD dwFlags, DWORD dwCallback);
  290. WORD FAR PASCAL mixGetFadeStatus(HMIXER hMixer,LPDWORD lpdwTime);
  291.  
  292. // INPUT-TO-OUTPUT CONNECTION FUNCTIONS
  293. WORD FAR PASCAL mixGetConnections(HMIXER hMixer,WORD wLine, LPDWORD lpdwConnections);
  294. WORD FAR PASCAL mixSetConnections(HMIXER hMixer,WORD wLine, DWORD dwConnections);
  295.  
  296. // LINE FUNCTIONS
  297. WORD FAR PASCAL mixGetControl(HMIXER hMixer, WORD wLineNum, DWORD dwControl, LPDWORD lpdwSetting);
  298. WORD FAR PASCAL mixSetControl(HMIXER hMixer, WORD wLineNum, DWORD dwControl, DWORD dwSetting);
  299. WORD FAR PASCAL mixGetLineInfo(HMIXER hMixer, WORD wLineNum, LPMIXERLINEINFO lpInfo,WORD wSize);
  300.  
  301. // PATCH FUNCTIONS
  302. WORD FAR PASCAL mixGetPatch(HMIXER hMixer,WORD wLineNum, LPWORD lpwPatchNum);
  303. WORD FAR PASCAL mixSetPatch(HMIXER hMixer,WORD wLine,WORD wPatchNum,LPPATCHINFO lpPatch,WORD wSize);
  304. WORD FAR PASCAL mixGetPatchInfo(HMIXER hMixer,WORD wPatchNum,LPPATCHINFO lpInfo,WORD wSize);
  305.  
  306. // DEVICE-TYPE ORIENTED FUNCTIONS
  307. WORD FAR PASCAL mixGetDeviceName(DWORD dwDeviceType, LPSTR lpDeviceName,WORD wSize);
  308. WORD FAR PASCAL mixGetDeviceLines(HMIXER hMixer,LPDEVICELINES lpDeviceLines);
  309. WORD FAR PASCAL mixSetDeviceConnections(HMIXER hMixer,LPDEVICECONNECT lpDeviceConnect);
  310. WORD FAR PASCAL mixGetDeviceConnections(HMIXER hMixer,LPDEVICECONNECT lpDeviceConnect);
  311.  
  312. // TEMPORARY DEVICE LOAD ENTRY
  313. void FAR PASCAL mixWakeUp(void);
  314.  
  315. // flags for wCrossoverCaps
  316. #define MIXCROSSCAPS_NORMAL_STEREO     0x0000     // Left->Left, Right->Right
  317. #define MIXCROSSCAPS_RIGHT_TO_BOTH     0x0001     // Right->Left, Right->Right
  318. #define MIXCROSSCAPS_LEFT_TO_BOTH    0x0002     // Left->Left, Left->Right
  319. #define MIXCROSSCAPS_REVERSE_STEREO 0x0004     // Left->Right, Right->Left
  320. #define MIXCROSSCAPS_RIGHT_TO_LEFT     0x0008     // Right->Left
  321. #define MIXCROSSCAPS_LEFT_TO_RIGHT    0x0010     // Left->Right
  322.  
  323.  
  324. // destined for MMDDK:
  325.  
  326. #define MAXMIXDRIVERS 4         // max number of mixer device drivers we load
  327.  
  328.  
  329. #define MIXDM_BASE                 0x800
  330. #define MIXDM_GETNUMDEVS       MIXDM_BASE+0
  331. #define MIXDM_GETDEVCAPS       MIXDM_BASE+1
  332. #define MIXDM_OPEN             MIXDM_BASE+2
  333. #define MIXDM_CLOSE            MIXDM_BASE+3
  334. #define MIXDM_RESET            MIXDM_BASE+4
  335. #define MIXDM_GETSTATE            MIXDM_BASE+5
  336. #define MIXDM_SETSTATE            MIXDM_BASE+6
  337. #define MIXDM_GETCONNECTIONS   MIXDM_BASE+7
  338. #define MIXDM_SETCONNECTIONS   MIXDM_BASE+8
  339. #define MIXDM_GETDEVLINES        MIXDM_BASE+9
  340. #define MIXDM_GETDEVCONNECTS   MIXDM_BASE+10
  341. #define MIXDM_SETDEVCONNECTS   MIXDM_BASE+11
  342. #define MIXDM_GETLINEINFO        MIXDM_BASE+12
  343. #define MIXDM_GETCONTROL         MIXDM_BASE+13
  344. #define MIXDM_SETCONTROL         MIXDM_BASE+14
  345. #define MIXDM_GETPATCHINFO        MIXDM_BASE+15
  346. #define MIXDM_GETPATCH           MIXDM_BASE+16
  347. #define MIXDM_SETPATCH            MIXDM_BASE+17
  348. #define MIXDM_SHUTDOWN            MIXDM_BASE+18
  349. #define MIXDM_GETFADESTATUS    MIXDM_BASE+19
  350. #define MIXDM_MUTE                 MIXDM_BASE+20
  351.  
  352. #define MIXMUTE_TOGGLE            NULL
  353. #define MIXMUTE_STATUS            1
  354.  
  355. #define MIXMUTESTATUS_MUTE        TRUE
  356. #define MIXMUTESTATUS_NOMUTE     FALSE
  357.  
  358.  
  359.  
  360. #define MCIERR_MIX_NO_SUCH_DEVICE     MCIERR_CUSTOM_DRIVER_BASE+768
  361.