//============================================================================= // Move to the previous track //============================================================================= MCIERROR CCDAudio::Backward() { TCHAR szBuff2[128], szBuff3[32]; int nCurrTrack = GetCurrentTrack(); const int nLastTrack = GetTracksCount(); if( (nCurrTrack == 0) || (nLastTrack == 0) || (nCurrTrack == 1) ) return 0; nCurrTrack--; _stprintf( szBuff2, _T("status cdaudio position track %d"), nCurrTrack ); m_nErrorCode = mciSendString( szBuff2, szBuff3, sizeof(szBuff3), NULL ); if( m_nErrorCode != 0 ){ MCIError( m_nErrorCode ); return m_nErrorCode; } memset(szBuff2, 0, sizeof(szBuff2)); _stprintf( szBuff2, _T("play cdaudio from %s"), szBuff3 ); m_nErrorCode = mciSendString( szBuff2, NULL, 0, NULL ); if( m_nErrorCode != 0 ){ MCIError( m_nErrorCode ); return m_nErrorCode; } return m_nErrorCode; }
//*************************************************************************** BOOL MCISetVideoDrawProc( WORD wDeviceID, VIDEO_DRAWDIB_PROC lpDrawDibProc, VIDEO_DRAWDC_PROC lpDrawDCProc ) //*************************************************************************** { DWORD dwRes; MCI_DGV_SETVIDEO_PARMS mciSet; DWORD dwDrawProc; if ( !wDeviceID ) return FALSE; lpMyDrawDibProc = lpDrawDibProc; lpMyDrawDCProc = lpDrawDCProc; if ( !lpMyDrawDibProc && !lpMyDrawDCProc ) dwDrawProc = NULL; else dwDrawProc = (DWORD)MCIDrawProc; mciSet.dwValue = dwDrawProc; //MakeProcInstance( lpDrawProc, GetApp()->GetInstance() ); mciSet.dwItem = MCI_AVI_SETVIDEO_DRAW_PROCEDURE; if ( (dwRes = mciSendCommand( wDeviceID, MCI_SETVIDEO, (DWORD)MCI_DGV_SETVIDEO_ITEM | MCI_DGV_SETVIDEO_VALUE, (DWORD)(LPMCI_DGV_SETVIDEO_PARMS)&mciSet )) ) { MCIError(dwRes); return FALSE; } return TRUE; }
//============================================================================= // Stop playing CD Audio //============================================================================= MCIERROR CCDAudio::Stop() { m_nErrorCode = mciSendString( _T("stop cdaudio"), NULL, 0, NULL ); // handle error if( m_nErrorCode != 0 ){ MCIError( m_nErrorCode ); return m_nErrorCode; } m_nErrorCode = mciSendString( _T("seek cdaudio to start"), NULL, 0, NULL ); if( m_nErrorCode != 0 ){ MCIError( m_nErrorCode ); return m_nErrorCode; } return m_nErrorCode; }
//============================================================================= // Pause playing CD Audio //============================================================================= MCIERROR CCDAudio::Pause() { m_nErrorCode = mciSendString( _T("pause cdaudio"), NULL, 0, NULL ); if( m_nErrorCode != 0 ){ MCIError( m_nErrorCode ); return m_nErrorCode; } return m_nErrorCode; }
//============================================================================= // Return the current track number //============================================================================= int CCDAudio::GetCurrentTrack() { TCHAR szBuff[16]; m_nErrorCode = mciSendString( _T("status cdaudio current track"), szBuff, sizeof(szBuff), NULL ); if( m_nErrorCode != 0 ){ MCIError( m_nErrorCode ); return 0; } return ATOI(szBuff); }
//============================================================================= // Return the count of tracks //============================================================================= int CCDAudio::GetTracksCount() { TCHAR szBuff[16]; m_nErrorCode = mciSendString( _T("status cdaudio number of tracks"), szBuff, sizeof(szBuff), NULL ); if( m_nErrorCode != 0 ){ MCIError( m_nErrorCode ); return 0; } return ATOI(szBuff); }
//============================================================================= // Move to the next track //============================================================================= MCIERROR CCDAudio::Forward() { TCHAR szBuff2[128], szBuff3[32]; int nCurrTrack = GetCurrentTrack(); const int nLastTrack = GetTracksCount(); // now the current track is the last track if( (nCurrTrack == nLastTrack) || (nLastTrack == 0) ) return 0; // increment track position nCurrTrack++; // form the command string _stprintf( szBuff2, _T("status cdaudio position track %d"), nCurrTrack ); // send the command string m_nErrorCode = mciSendString( szBuff2, szBuff3, sizeof(szBuff3), NULL ); if( m_nErrorCode != 0 ){ MCIError( m_nErrorCode ); return m_nErrorCode; } memset(szBuff2, 0, sizeof(szBuff2)); // form the command string _stprintf( szBuff2, _T("play cdaudio from %s"), szBuff3 ); // send the command string m_nErrorCode = mciSendString( szBuff2, NULL, 0, NULL ); if( m_nErrorCode != 0 ){ MCIError( m_nErrorCode ); return m_nErrorCode; } return m_nErrorCode; }
//============================================================================= // Start playing CD Audio on given position //============================================================================= MCIERROR CCDAudio::Play(const int nPos) { TCHAR szBuff[128]; // form the connection string _stprintf( szBuff, _T("play cdaudio from %02d:%02d:00"), (nPos / 60), (nPos % 60) ); // send the command string m_nErrorCode = mciSendString( szBuff, NULL, 0, NULL ); if( m_nErrorCode != 0 ){ MCIError( m_nErrorCode ); return m_nErrorCode; } return m_nErrorCode; }
//============================================================================= // Return the total tracks length //============================================================================= int CCDAudio::GetLenghtAllTracks() { TCHAR szBuff[16]; TCHAR min[3], sec[3]; m_nErrorCode = 0; m_nErrorCode = mciSendString( _T("status cdaudio length"), szBuff, sizeof(szBuff), NULL ); if( m_nErrorCode != 0 ){ MCIError( m_nErrorCode ); return 0; } STRNCPY( min, szBuff, 2 ); STRNCPY( sec, (szBuff + 3), 2 ); return ((ATOI(min) * 60) + ATOI(sec)); }
//============================================================================= // Return the current track position in seconds //============================================================================= int CCDAudio::GetCurrentPos() { if( IsMediaInsert() ) { TCHAR szBuff[16]; TCHAR min[3], sec[3]; m_nErrorCode = 0; m_nErrorCode = mciSendString( _T("status cdaudio position"), szBuff, sizeof(szBuff), NULL ); if( m_nErrorCode != 0 ){ MCIError( m_nErrorCode ); return 0; } STRNCPY( min, szBuff, 2 ); STRNCPY( sec, (szBuff + 3), 2 ); return ((ATOI(min) * 60) + ATOI(sec)); } return 0; }