Main Page | Alphabetical List | Compound List | File List | Compound Members | File Members

CD.C

Go to the documentation of this file.
00001 #define WIN32_LEAN_AND_MEAN
00002 #include        <windows.h>
00003 #include        <mmsystem.h>
00004 #pragma hdrstop
00005 
00006 #include        <stdio.h>
00007 #include        <stdlib.h>
00008 
00009 #include "cd.h"
00010 
00011 UINT    OpenCDPlayer(void)
00012 {
00013         MCI_SET_PARMS   mciSetParms;
00014         MCI_OPEN_PARMS  mciOpenParms;
00015         DWORD                   dwReturn;
00016         
00017         // Open the CD audio device by specifying the device name.
00018         mciOpenParms.lpstrDeviceType = "cdaudio";
00019         dwReturn = mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE, (DWORD)&mciOpenParms);
00020         if      (dwReturn)
00021         {
00022                 // Failed to open device. Don't close it; just return error.
00023                 return 0;
00024         }
00025 
00026         // Set the time format to track/minute/second/frame (TMSF).
00027         mciSetParms.dwTimeFormat = MCI_FORMAT_TMSF;
00028         dwReturn = mciSendCommand(mciOpenParms.wDeviceID, MCI_SET, MCI_SET_TIME_FORMAT, (DWORD)(LPVOID) &mciSetParms);
00029         if      (dwReturn)
00030         {
00031                 mciSendCommand(mciOpenParms.wDeviceID, MCI_CLOSE, 0, 0);
00032                 return 0;
00033         }
00034 
00035         return mciOpenParms.wDeviceID;
00036 }
00037 
00038 BOOL GetCDPosition(UINT Id, INT *Track, INT *Minute, INT *Second)
00039 {
00040         MCI_STATUS_PARMS        Parms;
00041         DWORD                           dwReturn;
00042 
00043         Parms.dwItem = MCI_STATUS_POSITION;
00044         Parms.dwCallback = 0;
00045         dwReturn = mciSendCommand(Id, MCI_STATUS, MCI_STATUS_ITEM, (DWORD)&Parms);
00046 
00047         if (dwReturn)
00048                 return FALSE;
00049 
00050         if (Track)
00051                 *Track = (INT)MCI_TMSF_TRACK(Parms.dwReturn);
00052 
00053         if (Minute)
00054                 *Minute = (INT)MCI_TMSF_MINUTE(Parms.dwReturn);
00055 
00056         if (Second)
00057                 *Second = (INT)MCI_TMSF_SECOND(Parms.dwReturn);
00058 
00059         return(TRUE);
00060 }
00061 
00062 void    StopCDPlayer(UINT id)
00063 {
00064         mciSendCommand(id, MCI_STOP, 0, 0);
00065 }
00066 
00067 void    CloseCDPlayer(UINT id)
00068 {
00069         mciSendCommand(id, MCI_CLOSE, 0, 0);
00070 }
00071 
00072 DWORD   PlayCDTrack(UINT wDeviceID,
00073                                         HWND hWndNotify,
00074                                         BYTE bTrack,
00075                                         int  startMin,
00076                                         int  startSec,
00077                                         int      stopMin,
00078                                         int      stopSec)
00079 {
00080         DWORD                   dwReturn;
00081         MCI_PLAY_PARMS  mciPlayParms;
00082 
00083         // Begin playback from the given track and play until the beginning 
00084         // of the next track. The window procedure function for the parent 
00085         // window will be notified with an MM_MCINOTIFY message when 
00086         // playback is complete. Unless the play command fails, the window 
00087         // procedure closes the device.
00088         mciPlayParms.dwFrom = 0L;
00089         mciPlayParms.dwTo   = 0L;
00090         mciPlayParms.dwFrom = MCI_MAKE_TMSF(bTrack, startMin, startSec, 0);
00091         mciPlayParms.dwTo   = MCI_MAKE_TMSF(bTrack, stopMin, stopSec, 0);
00092         mciPlayParms.dwCallback = (DWORD) hWndNotify;
00093         dwReturn = mciSendCommand(wDeviceID, MCI_PLAY, MCI_FROM | MCI_TO | MCI_NOTIFY, (DWORD)(LPVOID) &mciPlayParms);
00094         if (dwReturn)
00095         {
00096                 mciSendCommand(wDeviceID, MCI_CLOSE, 0, 0);
00097                 return 0;
00098         }
00099 
00100         return 0;
00101 }
00102 
00103 #ifdef SINGLE_BUILD_FOR_TEST
00104 void    main(void)
00105 #else
00106 void    TestCd(void)
00107 #endif
00108 {
00109         UINT    id;
00110 
00111         id = OpenCDPlayer();
00112         PlayCDTrack(id, 0, 1, 1, 0, 5, 0);
00113         Sleep(2000);
00114         PlayCDTrack(id, 0, 1, 1, 0, 5, 30);
00115         Sleep(2000);
00116         PlayCDTrack(id, 0, 1, 1, 0, 5, 30);
00117         Sleep(2000);
00118         StopCDPlayer(id);
00119         CloseCDPlayer(id);
00120 }

Generated on Tue Sep 30 12:35:24 2003 for GTestAndEngine by doxygen 1.3.2