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);
}