PersonalCorpus 版 (精华区)
多媒体程序设计
用MCI播放WAVE音频 hjt整理
class CWaveAudio //处理波形类
{
public:
CWaveAudio();//构造函数
virtual ~CWaveAudio();//构析函数
int GetDevices (void);//得到播放设备
BOOL Load (CString);//载入文件
void Close (void);//关闭文件
BOOL Play ();//播放
void Stop (void);//停止播放
BOOL Record (void);//录制
BOOL Save (CString);//保存
WORD GetResolution();//得到位长
DWORD GetSampleRate();//得到采样率
WORD GetChannel();//得到声道
DWORD GetWaveLength();//得到音频长度
private:
BOOL m_bRecording;//是否在录音
BOOL m_bOpened;//是否打开文件
WORD m_wDeviceID;//播放设备ID
};
CWaveAudio::CWaveAudio()
{
m_bRecording = FALSE;
m_bOpened = FALSE;
m_wDeviceID = 0;
}
CWaveAudio::~CWaveAudio()
{
Close();
}
int CWaveAudio::GetDevices (void)
{
return waveOutGetNumDevs ();
}
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;
MCI_SET_PARMS SetParms;
SetParms.dwTimeFormat=MCI_FORMAT_MILLISECONDS;
if(mciSendCommand(m_wDeviceID,MCI_SET,MCI_SET_TIME_FORMAT,
(DWORD)(LPVOID) &SetParms))
return FALSE;
return TRUE;
}
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 ()
{
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;
}
void CWaveAudio::Stop (void)
{
mciSendCommand (m_wDeviceID, MCI_STOP, NULL, NULL);
}
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;
MCI_RECORD_PARMS RecordParms;
if (mciSendCommand (m_wDeviceID, MCI_RECORD, NULL,
(DWORD)(LPVOID) &RecordParms))
return FALSE;
m_bRecording = TRUE;
m_bOpened = TRUE;
return TRUE;
}
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;
}
DWORD CWaveAudio::GetSampleRate()
{
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;
}
WORD CWaveAudio::GetChannel()
{
MCI_STATUS_PARMS StatusParms;
StatusParms.dwItem=MCI_WAVE_STATUS_CHANNELS;
i(mciSendCommand(m_wDeviceID,MCI_STATUS,
MCI_WAIT|MCI_STATUS_ITEM,
(DWORD)(LPVOID)&StatusParms))
return -1;
else return StatusParms.dwReturn;
}
WORD CWaveAudio::GetResolution()
{
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::GetWaveLength()
{
MCI_STATUS_PARMS StatusParms;
StatusParms.dwItem=MCI_STATUS_LENGTH;
if(mciSendCommand(m_wDeviceID,MCI_STATUS,
MCI_WAIT|MCI_STATUS_ITEM,
(DWORD)(LPVOID) &StatusParms))
return -1;
else return StatusParms.dwReturn;
}
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:13.398毫秒