⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 midi.cpp

📁 利用Visual c++编程思想方法实现五子棋游戏的程序设计整个过程
💻 CPP
字号:
// Midi.cpp: implementation of the CMidi class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ff.h"
#include "Midi.h"

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

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

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

WORD CMidi::GetDevicID()
{
	return  m_wDeviceID;
}

BOOL CMidi::Open(CString strFileName)
{
	if(m_bOpened)
		Close();

	m_bOpened = m_bPaused = m_bPlaying = FALSE;
	m_wDeviceID = 0;
	
	CFileStatus Status;
	if(!CFile::GetStatus(strFileName, Status))
		return FALSE;
	
	MCI_OPEN_PARMS OpenParams;
	OpenParams.dwCallback = FALSE;
	OpenParams.lpstrDeviceType = (LPCSTR)MCI_DEVTYPE_SEQUENCER;
	OpenParams.wDeviceID = 0;
	OpenParams.lpstrElementName = (LPCSTR)strFileName;

	if(mciSendCommand(NULL, MCI_OPEN, 
					MCI_WAIT | MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID | MCI_OPEN_ELEMENT,
					(DWORD)&OpenParams))
		return FALSE;

	m_wDeviceID=OpenParams.wDeviceID;
	m_bOpened=TRUE;
	
	MCI_SET_PARMS SetParams;
	SetParams.dwTimeFormat = MCI_FORMAT_MILLISECONDS;
	if(mciSendCommand(m_wDeviceID, MCI_SET,
					MCI_SET_TIME_FORMAT, (DWORD)&SetParams))
	{
		Close();
		return FALSE;
	}

	mciSendCommand(m_wDeviceID, MCI_SEEK, MCI_SEEK_TO_START, NULL);
	return TRUE;
}

void CMidi::Close()
{
	if(m_bOpened)
	{
		if(m_bPlaying || m_bPaused)
			mciSendCommand(m_wDeviceID, MCI_STOP, NULL, NULL);

		mciSendCommand(m_wDeviceID, MCI_CLOSE, NULL, NULL);
		m_bOpened = m_bPaused = m_bPlaying = FALSE;
		m_wDeviceID = 0;
	}
}

BOOL CMidi::Play()
{
	if(m_bOpened)
	{
		SeekTo(0, 0);
		MCI_PLAY_PARMS PlayParams;
		PlayParams.dwCallback = NULL;
		PlayParams.dwFrom = 0;
		//PlayParams.dwFrom=((GetCurrentMin()*60)+GetCurrentSec())*1000;

		if(mciSendCommand(m_wDeviceID, MCI_PLAY, (MCI_FROM), (DWORD)&PlayParams) != 0)
			return FALSE;

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

void CMidi::Stop()
{
	if(m_bOpened && m_bPlaying)
	{
		mciSendCommand(m_wDeviceID, MCI_STOP, NULL, NULL);
		mciSendCommand(m_wDeviceID, MCI_SEEK, MCI_SEEK_TO_START, NULL);
		m_bPlaying = FALSE;
		m_bPaused = FALSE;
	}
}
		
int CMidi::GetCurrentMin()
{
	if(m_bOpened)
	{
		MCI_STATUS_PARMS StatusParams;
		StatusParams.dwItem = MCI_STATUS_POSITION;
		if(mciSendCommand(m_wDeviceID, MCI_STATUS, 
						MCI_WAIT | MCI_STATUS_ITEM, (DWORD)&StatusParams))
			return -1;

		return (int)((StatusParams.dwReturn / 1000) / 60);
	}
	return -1;
}

int CMidi::GetCurrentSec()
{
	if(m_bOpened)
	{
		MCI_STATUS_PARMS StatusParams;
		StatusParams.dwItem = MCI_STATUS_POSITION;
		if(mciSendCommand(m_wDeviceID, MCI_STATUS,
						MCI_WAIT | MCI_STATUS_ITEM, (DWORD)&StatusParams))
			return -1;

		return (int)(StatusParams.dwReturn / 1000 - (StatusParams.dwReturn / 1000) / 60);
	}
	return -1;
}

BOOL CMidi::IsPlaying()
{
	return m_bPlaying;
}

BOOL CMidi::SeekTo(int nMinute,int nSeconds)
{
	if(m_bOpened)
	{
		MCI_SEEK_PARMS SeekParams;
		SeekParams.dwTo = (nMinute * 60 + nSeconds) * 1000;
		if(m_bPlaying && m_bPaused)
		{
			mciSendCommand(m_wDeviceID, MCI_PAUSE, NULL, NULL);
			if(mciSendCommand(m_wDeviceID, MCI_SEEK,
							MCI_TO | MCI_WAIT, (DWORD)&SeekParams))
				return FALSE;
		}
		if(m_bPlaying && !m_bPaused)
			Play();

		return TRUE;
	}
	return FALSE;
}

void CMidi::Forward(int nSeconds)
{
	if(m_bOpened)
	{
		MCI_STATUS_PARMS StatusParams;
		DWORD dwPos;
		StatusParams.dwItem = MCI_STATUS_POSITION;
		
		mciSendCommand(m_wDeviceID, MCI_STATUS, MCI_STATUS_ITEM, (DWORD)&StatusParams);
		dwPos = StatusParams.dwReturn ;
		dwPos += nSeconds*1000;
		MCI_SEEK_PARMS SeekParams;
		SeekParams.dwTo = dwPos;
		if(m_bPlaying && m_bPaused)
		{
			mciSendCommand(m_wDeviceID, MCI_PAUSE, NULL, NULL);
			mciSendCommand(m_wDeviceID, MCI_SEEK,
						MCI_TO | MCI_WAIT, (DWORD)&StatusParams);
		}
		if(m_bPlaying && !m_bPaused)
			Play();
	}
}

void CMidi::Backward(int nSeconds)
{
	if(m_bOpened)
	{
		MCI_STATUS_PARMS StatusParams;
		DWORD dwPos;
		StatusParams.dwItem = MCI_STATUS_POSITION;
		
		mciSendCommand(m_wDeviceID, MCI_STATUS,
					MCI_STATUS_ITEM, (DWORD)&StatusParams);
		dwPos = StatusParams.dwReturn ;
		dwPos -= nSeconds * 1000;
		MCI_SEEK_PARMS SeekParams;
		SeekParams.dwTo = dwPos;
		if(m_bPlaying && m_bPaused)
		{
			mciSendCommand(m_wDeviceID, MCI_PAUSE, NULL, NULL);
			mciSendCommand(m_wDeviceID, MCI_SEEK,
						MCI_TO | MCI_WAIT, (DWORD)&SeekParams);
		}
		if(m_bPlaying && !m_bPaused)
			Play();
	}
}

int CMidi::GetTempo(int)
{
	if(m_bOpened)
	{
		MCI_STATUS_PARMS StatusParams;
		StatusParams.dwItem = MCI_SEQ_STATUS_TEMPO;
		if(mciSendCommand(m_wDeviceID, MCI_STATUS,
						MCI_WAIT | MCI_STATUS_ITEM, (DWORD)&StatusParams))
		return -1;
		return (int)StatusParams.dwReturn;
	}
	return -1;
}

int CMidi::GetMidiLen()
{
	if(m_bOpened)
	{
		MCI_STATUS_PARMS StatusParams;
		StatusParams.dwItem = MCI_STATUS_LENGTH;
		if(mciSendCommand(m_wDeviceID, MCI_STATUS,
						MCI_WAIT | MCI_STATUS_ITEM, (DWORD)&StatusParams))
			return -1;

		return (int)StatusParams.dwReturn;
	}
	return -1;
}

⌨️ 快捷键说明

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