Knowledge Base |

# ACC: Sample MCI Functions to control a CD Player (1.x/2.0)

Article ID: 109371

Article Last Modified on 5/6/2003

APPLIES TO

- Microsoft Access 1.0 Standard Edition
- Microsoft Access 1.1 Standard Edition
- Microsoft Access 2.0 Standard Edition

This article was previously published under Q109371

## SUMMARY

Advanced: Requires expert coding, interoperability, and multiuser skills.
This article demonstrates how to create sample Access Basic functions that you can use to make calls to the media control interface (MCI) using the mciSendString() function to run a CD player application from Microsoft Access.
NOTE: These sample functions require that you use Windows version 3.1, or Multimedia Windows version 3.0, or Windows 95 and a CD-ROM drive that supports MCI.

## MORE INFORMATION

The sample program below uses several functions to control basic CD-ROM drive features such as stop, play, and eject. The functions can be used in any CD-ROM application you create. The sample program below is not a complete application, but is rather a basis you can use to create a full- featured application.
The simplest way to use these functions is to create a form with five command buttons on it. Have each of the buttons call one of the five sample functions below with its OnPush property.
To create these functions, create a new Access Basic module and enter the following Declarations and functions.
NOTE: In the following sample code, an underscore (_) is used as a line- continuation character. Remove the underscore from the end of the line when re-creating this code in Access Basic.
NOTE: You may have these Microsoft Windows API functions defined in an existing Microsoft Access library or module; therefore, your declarations may be duplicates causing a duplicate procedure name error message. There are two resolutions to this error:

- Remove or comment out the duplicated declarations statements.
- Use function aliasing by replacing the phrase "alias_" throughout the code below with your own unique aliasing characters. This method allows you to remove the other module and not lose the declarations for the API functions in the new module.

For more information about aliasing see page 369 of the "Building Applications" manual.

       '******* Declarations Section *******

       Option Compare Database
       Option Explicit

       Declare Function alias_mciSendString& Lib "MMSystem" alias_
       "mciSendString" (ByVal Sound$, ByVal RtnString$,_
       ByVal RtnLength%, ByVal Hndl%)

       Dim RetInt As Integer
       Dim RetStr As String * 64
       Dim mciStatement As String

       Global gTrackCurrent As Integer ' stores current track on CD.
       Global gTrackCount As Integer   ' stores count of tracks on CD.

       '******* Play Function *********

       Function CDPlay () As Integer
          ' This function initializes the audio device
          ' with the first call to mciSendString(), and
          ' then starts the CD playing with the second call.

          RetInt = alias_mciSendString("Open CDAudio", "", 0, 0)
          CDPlay = alias_mciSendString("Play CDAudio", "", 0, 0)
       End Function

       '******* Stop Function **********

       Function CDStop () As Integer
          ' This function stops the CD with the first call
          ' to mciSendString(), and closes the audio device
          ' with the second call.
          RetInt = alias_mciSendString("Stop CDAudio", "", 0, 0)
          CDStop = alias_mciSendString("Close CDAudio", "", 0, 0)
       End Function

       '******** Previous Track Function **********

       Function CDTrackPrevious ()
          Dim TrackPrevious As Integer

          ' Set time format to Tracks, minutes, seconds, and frames.
          RetInt = alias_mciSendString("Set CDAudio Time Format TMSF",_
          "", 0, 0)

          ' Retrieve the track number that is currently playing, and
          ' the total number of tracks on the CD. Store these values
          ' in global variables so that they are available to the form.

          mciStatement = "Status CDAudio Current Track"
          RetInt = alias_mciSendString(mciStatement, RetStr, 63, 0)
          gTrackCurrent = Val(RetStr)
          TrackPrevious = gTrackCurrent - 1
          mciStatement = "Status CDAudio Number of Tracks"
          RetInt = alias_mciSendString(mciStatement, RetStr, 63, 0)
          gTrackCount = Val(RetStr)

          ' Check to see if the current track is the first track. If it
          ' is seek to the beginning of the current track and play it.
          ' Otherwise, move to the previous track and play from there to
          ' the end of the CD.

          If TrackPrevious > 0 Then
             mciStatement = "Play CDAudio from " & TrackPrevious
             mciStatement = mciStatement & " To " & gTrackCount
             CDTrackPrevious = alias_mciSendString(mciStatement, "", 0, 0)
          Else
             mciStatement = "Seek CDAudio to " & TrackPrevious
             RetInt = alias_mciSendString(mciStatement, "", 0, 0)
             CDTrackPrevious = alias_mciSendString("Play CDAudio", "", 0, 0)
          End If
       End Function

       '********** Next Track Function **********

       Function CDTrackNext () As Integer
          Dim TrackNext As Integer

          ' Set time format to Tracks, minutes, seconds, and frames.
          RetInt = alias_mciSendString("Set CDAudio Time Format TMSF",_
          "", 0, 0)

          ' Retrieve the track number that is currently playing, and
          ' the total number of tracks on the CD. Store these values
          ' in global variables so that they are available to the form.

          mciStatement = "Status CDAudio Current Track"
          RetInt = alias_mciSendString(mciStatement, RetStr, 63, 0)
          gTrackCurrent = Val(RetStr)
          TrackNext = gTrackCurrent + 1
          mciStatement = "Status CDAudio Number of Tracks"
          RetInt = alias_mciSendString(mciStatement, RetStr, 63, 0)
          gTrackCount = Val(RetStr)

          ' Check to see if the current track is the last track. If it
          ' is seek to the beginning of the last track and play it.
          ' Otherwise, move to the next track and play from there to the end
          ' of the CD.

          If (TrackNext) < gTrackCount Then
              mciStatement = "Play CDAudio from " & TrackNext
              mciStatement = mciStatement & " To " & gTrackCount
              CDTrackNext = alias_mciSendString(mciStatement, "", 0, 0)
           Else
              mciStatement = "Seek CDAudio to " & gTrackCurrent
              RetInt = alias_mciSendString(mciStatement, "", 0, 0)
              CDTrackNext = alias_mciSendString("Play CDAudio", "", 0, 0)
          End If
       End Function

       '********* Eject Function **********

       Function CDEject () As Integer
          ' This function is not supported by all CD devices.
          CDEject = alias_mciSendString("Set CDAudio Door Open", "", 0, 0)
       End Function

       '********* Pause Function **********

       Function CDPause () As Integer
          CDPause = alias_mciSendString("Stop CDAudio", "", 0, 0)
       End Function

Note that these functions are only a sample; there are many other functions that can be implemented with mciSendString(). For example, the Position command returns the current track number that is being played. By using the Position command with the timer function described in article 95924, "How to Implement a Timer," you can create a dynamically updated readout of the current track number being played.

## REFERENCES

Microsoft Windows Software Development Kit "Multimedia Programmer's Reference," Chapter 7, "MCI Command Strings"
Microsoft Windows Device Driver Kit "Multimedia Device Adaptation Guide", Chapter 3, "MCI Device Drivers"

Additional query words: cdrom

Keywords: kbinfo kbprogramming KB109371