cdaudio.cpp

来自「这是一个VCD播放器的程序」· C++ 代码 · 共 191 行

CPP
191
字号
// CDAudio.cpp: implementation of the CCDAudio class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "EX_Cdplayer01.h"
#include "CDAudio.h"
#include "mmsystem.h"		//"mmsystem.h"为系统多媒体头文件

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CCDAudio::CCDAudio()
{
m_bOpened = m_bPaused = m_bPlaying = FALSE;
m_wDeviceID = 0;

}

CCDAudio::~CCDAudio()
{
 Close();
}

BOOL CCDAudio::Open()
{
if(!m_bOpened)
	  {
		m_bOpened = m_bPaused = m_bPlaying = FALSE;//设置成员变量值
		m_wDeviceID = 0; 

		MCI_OPEN_PARMS OpenParms;
		OpenParms.lpstrDeviceType = (LPCSTR) MCI_DEVTYPE_CD_AUDIO;
		OpenParms.wDeviceID = 0;
		if (mciSendCommand (NULL, MCI_OPEN, MCI_WAIT | MCI_OPEN_TYPE |
 MCI_OPEN_TYPE_ID | MCI_OPEN_SHAREABLE, (DWORD)(LPVOID) &OpenParms))
		{
		   return FALSE;
		}
		m_wDeviceID = OpenParms.wDeviceID;
		m_bOpened = TRUE;

		MCI_SET_PARMS SetParms;
		SetParms.dwTimeFormat = MCI_FORMAT_TMSF;
		if (mciSendCommand (m_wDeviceID, MCI_SET, MCI_WAIT |
MCI_SET_TIME_FORMAT, (DWORD)(LPVOID) &SetParms))
		{
		   Close ();
		   return FALSE;
		}
		mciSendCommand (m_wDeviceID, MCI_SEEK, MCI_SEEK_TO_START, NULL);
}
return TRUE;

}

void CCDAudio::Close()
{
if (m_bOpened)
{
		if (m_bPlaying || m_bPaused)
		{
		  mciSendCommand (m_wDeviceID, MCI_STOP, NULL, NULL);
		}
		mciSendCommand (m_wDeviceID, MCI_CLOSE, MCI_WAIT, NULL);

		m_bOpened = m_bPaused = m_bPlaying = FALSE;
		m_wDeviceID = 0;
	  }

}

BOOL CCDAudio::Play()
{
if (!m_bOpened)
{
		Open ();
}
if (m_bOpened)
	  {
		MCI_PLAY_PARMS PlayParms;
		PlayParms.dwCallback = NULL;
		if (mciSendCommand (m_wDeviceID, MCI_PLAY, 0,
 (DWORD)(LPVOID) &PlayParms))
		{
		  return FALSE;
		}

		m_bPaused = FALSE;
		m_bPlaying = TRUE;
		return TRUE;
}
return FALSE;

}

void CCDAudio::Stop()
{
if (m_bOpened && m_bPlaying)
{
		mciSendCommand (m_wDeviceID, MCI_STOP, MCI_WAIT, NULL);
		mciSendCommand (m_wDeviceID, MCI_SEEK, MCI_SEEK_TO_START, NULL);
		m_bPlaying = FALSE;
		m_bPaused = FALSE;
	  }

}

void CCDAudio::Pause()
{
if (m_bOpened && m_bPlaying)
{
		MCI_PLAY_PARMS PlayParms;
		if (mciSendCommand (m_wDeviceID, MCI_PAUSE, 0, 
(DWORD)(LPVOID) &PlayParms))
		{
		   return;
		}
		m_bPaused = TRUE;
}

}

int CCDAudio::GetCurrentTrack()
{
if (m_bOpened)
	  {
		MCI_STATUS_PARMS StatusParms;
		StatusParms.dwItem = MCI_STATUS_CURRENT_TRACK;
		if (mciSendCommand (m_wDeviceID, MCI_STATUS, MCI_WAIT |
 MCI_STATUS_ITEM, (DWORD)(LPVOID) &StatusParms))
		{
		  return -1;
		}

		return MCI_TMSF_TRACK (StatusParms.dwReturn);
}
return -1;

}

int CCDAudio::GetTotalTracks()
{
if (m_bOpened)
	  {
		// Save the total length
		MCI_STATUS_PARMS StatusParms;
		StatusParms.dwItem = MCI_STATUS_NUMBER_OF_TRACKS;
		if (mciSendCommand (m_wDeviceID, MCI_STATUS, MCI_WAIT |
 MCI_STATUS_ITEM, (DWORD)(LPVOID) &StatusParms))
		{
		  return -1;
		}
		return MCI_TMSF_TRACK (StatusParms.dwReturn);
}
return -1;

}

BOOL CCDAudio::SeekTo(int nTrack)
{
if (m_bOpened)
	  {
		MCI_SEEK_PARMS SeekParms;
		SeekParms.dwTo =nTrack;
		if (m_bPlaying && !m_bPaused)
		{
		   mciSendCommand (m_wDeviceID, MCI_PAUSE, 0, NULL);
		}
		if (mciSendCommand (m_wDeviceID, MCI_SEEK, MCI_TO | MCI_WAIT,
 (DWORD)(LPVOID) &SeekParms))
		{
		  return FALSE;
		}
		if (m_bPlaying && !m_bPaused)
		{
		  Play();
		}
		return TRUE;
}
return FALSE;

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?