Duet Player Sample Program Example

The following code fragment illustrates the creation of a device group in the Duet Player I sample program. An array is filled with the IDs of opened devices to be associated in the group. The application then calls MCI_GROUP to create the group and return a handle.

  /* If this is the first time through this routine, then we need to
   * open the devices and make the group.
   *
   * On subsequent calls to this routine, the devices are already open
   * and the group is already made, so we only need to load the
   * appropriate files onto the devices.
   */
  {
  /*
   * Open one part of the duet. The first step is to initialize an
   * MCI_OPEN_PARMS data structure with the appropriate information,
   * then issue the MCI_OPEN command with the mciSendCommand function.
   * We will be using an open with only the element name specified.
   * This will cause the default connection, as specified in the
   * MMPM.INI file, for the data type.
   */
  mopDuetPart.hwndCallback   =  hwnd;     /* For MM_MCIPASSDEVICE   */
  mopDuetPart.usDeviceID     = (USHORT) NULL; /* this is returned   */
  mopDuetPart.pszDeviceType  = (PSZ) NULL;    /* using default conn.*/
  mopDuetPart.pszElementName = (PSZ) aDuet[sDuet].achPart1;

  ulError = mciSendCommand( (USHORT) 0,
                            MCI_OPEN,
                            MCI_WAIT | MCI_OPEN_ELEMENT |
                            MCI_OPEN_SHAREABLE | MCI_READONLY,
                            (PVOID) &mopDuetPart,
                            UP_OPEN);

  if (!ulError)  /* if we opened part 1 */
  {
     usDuetPart1ID = mopDuetPart.usDeviceID;

     /*
      * Now, open the other part.
      */
     mopDuetPart.pszElementName    = (PSZ)   aDuet[sDuet].achPart2;

     ulError = mciSendCommand( (USHORT) 0,
                               MCI_OPEN,
                               MCI_WAIT | MCI_OPEN_ELEMENT |
                               MCI_OPEN_SHAREABLE | MCI_READONLY,
                               (PVOID) &mopDuetPart,
                               UP_OPEN);

  if (!ulError)  /* if we opened part 2 */
  {
     usDuetPart2ID = mopDuetPart.usDeviceID;

 /*
  * Now we need to create a group.  To do this,
  * we need to fill an array with the IDs of the already open
  * devices that we want to group.  Then we call MCI_GROUP to
  * create the group and return a handle to it.
  */

 ulDeviceList[0] = (ULONG)usDuetPart1ID;
 ulDeviceList[1] = (ULONG)usDuetPart2ID;

 mgpGroupParms.hwndC  lback = (HWND) NULL;     /* Not needed -
                                                  we're waiting     */
 mgpGroupParms.ulNumDevices = NUM_PARTS;       /* Count of devices  */
 mgpGroupParms.paulDeviceID = (PULONG)&ulDeviceList; /* Array of
                                                        devices     */
 mgpGroupParms.ulStructLength = sizeof (mgpGroupParms);

ulError = mciSendCommand( (USHORT) 0,
                           MCI_GROUP,
                           MCI_WAIT | MCI_GROUP_MAKE|
                           MCI_NOPIECEMEAL,
                           (PVOID) &mgpGroupParms,
                           UP_GROUP);

 fFirstPlay = FALSE;


[Back: Device Groups]
[Next: Resource Allocation]