www.pudn.com > WavePlayer_Record_Save.rar > WaveAudio.cpp


#include "StdAfx.h" 
#include ".\waveaudio.h" 
 
CWaveAudio::CWaveAudio(void) 
: m_bRecording(0) 
, m_bOpened(FALSE) 
{ 
	m_bRecording=FALSE; 
	m_bOpened=FALSE; 
	m_wDeviceID=0; 
} 
 
CWaveAudio::~CWaveAudio(void) 
{ 
	Close(); 
} 
 
 
 
// 得到播放设备 
int CWaveAudio::GetDevices(void) 
{ 
	return 0; 
} 
 
//载入文件 
BOOL CWaveAudio::Load(CString Filename) 
{ 
	Close(); 
 
	MCI_OPEN_PARMS OpenParms; 
	OpenParms.lpstrDeviceType="waveaudio"; 
	OpenParms.lpstrElementName=Filename; 
	if(mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT|MCI_OPEN_TYPE,(DWORD)(LPVOID)&OpenParms)) 
		return FALSE; 
	m_wDeviceID=OpenParms.wDeviceID; 
	m_bOpened=TRUE; 
 
	return TRUE; 
  
	return 0; 
} 
 
// 关闭文件 
void CWaveAudio::Close(void) 
{ 
	m_bRecording=FALSE; 
	m_bOpened=FALSE; 
	if(m_wDeviceID) 
	{ 
		mciSendCommand(m_wDeviceID,MCI_STOP,MCI_WAIT,NULL); 
		mciSendCommand(m_wDeviceID,MCI_CLOSE,NULL,NULL); 
	} 
	m_wDeviceID=0; 
} 
 
// 播放 
BOOL CWaveAudio::Play(void) 
{ 
	Stop(); 
	MCI_PLAY_PARMS PlayParms; 
    mciSendCommand(m_wDeviceID,MCI_SEEK,MCI_SEEK_TO_START,NULL); 
	if(mciSendCommand(m_wDeviceID,MCI_PLAY,NULL,(DWORD)(LPVOID)&PlayParms)) 
	 
		return FALSE; 
	else  
		return TRUE; 
 
	return 0; 
} 
 
// 录制 
BOOL CWaveAudio::Record(void) 
{ 
	Close ();//为成功打开设备,录制前关闭一次设备 
	MCI_OPEN_PARMS OpenParms; 
	OpenParms.lpstrDeviceType = "waveaudio"; 
	OpenParms.lpstrElementName = ""; 
	if (::mciSendCommand (NULL, 
		                 MCI_OPEN, 
						 MCI_OPEN_ELEMENT | MCI_OPEN_TYPE 
						 | MCI_WAIT, 
						 (DWORD)(LPVOID) &OpenParms)) 
				return FALSE; //打开设备失败 
	m_wDeviceID = OpenParms.wDeviceID;//打开设备成功,保存设备ID 
	 
	MCI_RECORD_PARMS RecordParms; 
	if (mciSendCommand (m_wDeviceID, 
		               MCI_RECORD, 
					   NULL, 
					   (DWORD)(LPVOID) &RecordParms)) 
				return FALSE; 
 
   //开始录音,设置程序相应标志 
   m_bRecording = TRUE; 
   m_bOpened = TRUE; 
   return TRUE; 
 
	return 0; 
} 
 
BOOL CWaveAudio::Save(CString Filename) 
{ 
	if (!m_bRecording) 
		return FALSE; 
	Stop (); 
	 
	MCI_SAVE_PARMS SaveParms; 
	SaveParms.lpfilename = (LPCSTR) Filename; 
	if (mciSendCommand (m_wDeviceID, 
		                MCI_SAVE, 
						MCI_SAVE_FILE | MCI_WAIT, 
						(DWORD)(LPVOID) &SaveParms)) 
			return FALSE; 
	 
	m_bRecording = FALSE; 
	Load (Filename); 
	return TRUE; 
	return 0; 
} 
 
// 得到位长 
WORD CWaveAudio::GetResolution(void) 
{ 
	MCI_STATUS_PARMS StatusParms; 
	StatusParms.dwItem = MCI_WAVE_STATUS_BITSPERSAMPLE; 
	 
	if(mciSendCommand(m_wDeviceID,MCI_STATUS, 
		             MCI_WAIT|MCI_STATUS_ITEM,(DWORD)(LPVOID)&StatusParms)) 
			return -1; 
	else return StatusParms.dwReturn; 
} 
 
// 得到采样率 
DWORD CWaveAudio::GetSampleRate(void) 
{ 
	MCI_STATUS_PARMS StatusParms; 
	StatusParms.dwItem = MCI_WAVE_STATUS_SAMPLESPERSEC; 
	 
	if(mciSendCommand(m_wDeviceID,MCI_STATUS, 
		             MCI_WAIT|MCI_STATUS_ITEM,(DWORD)(LPVOID)&StatusParms)) 
			return -1; 
	else return StatusParms.dwReturn; 
	 
	return 0; 
} 
 
// 得到声道 
WORD CWaveAudio::GetChannel(void) 
{ 
	MCI_STATUS_PARMS StatusP; 
	StatusP.dwItem = MCI_WAVE_STATUS_CHANNELS; 
	 
	if(mciSendCommand(m_wDeviceID,MCI_STATUS, 
		             MCI_WAIT|MCI_STATUS_ITEM,(DWORD)(LPVOID)&StatusP)) 
			return -1; 
	else 
		return StatusP.dwReturn; 
} 
 
// 得到音频长度 
DWORD CWaveAudio::GetWaveLength(void) 
{ 
	MCI_STATUS_PARMS StatusP; 
	StatusP.dwItem = MCI_STATUS_LENGTH; 
	 
	if(mciSendCommand(m_wDeviceID,MCI_STATUS, 
		             MCI_WAIT|MCI_STATUS_ITEM,(DWORD)(LPVOID)&StatusP)) 
	           return -1; 
	else 
		return StatusP.dwReturn; 
	return 0; 
} 
 
void CWaveAudio::Stop(void) 
{ 
	mciSendCommand(m_wDeviceID,MCI_STOP,NULL,NULL); 
}