int fi,fr;
DWORD cdfrom,cdto;
int hour,minute,second;
DWORD cdlen;
DWORD getinfo(DWORD item);
DWORD m_count;
// play a segment WAVE
void CAudioSeparatorDlg::PlayWaveSegment(CString &strFile, int &nSecond)
{
MCI_OPEN_PARMS mciopenparms;//打开
MCI_PLAY_PARMS mciplayparms;//播放
mciopenparms.lpstrElementName=strFile;//播放路径
mciopenparms.lpstrDeviceType=NULL;//文件类型
mciSendCommand(0,MCI_OPEN,MCI_DEVTYPE_WAVEFORM_AUDIO,(DWORD)(LPVOID)&mciopenparms);//向MCI设备发送命令消息
m_count=mciopenparms.wDeviceID;
mciplayparms.dwCallback=(DWORD)GetSafeHwnd();
cdlen=getinfo(MCI_STATUS_LENGTH); //得到曲目长度
cdto=MCI_MAKE_HMS(MCI_HMS_HOUR(cdlen),MCI_HMS_MINUTE(cdlen),MCI_HMS_SECOND(cdlen));
cdfrom=MCI_MAKE_HMS(0,0,0);
//mciplayparms.dwFrom=cdfrom;
mciplayparms.dwFrom = (nSecond * 1000); // wave data offset, here play
mciplayparms.dwTo = cdto;
if(mciplayparms.dwFrom > cdlen || mciplayparms.dwTo > cdlen)
{
StopPlay();
}
mciSendCommand(m_count,MCI_PLAY,MCI_TO|MCI_FROM,(DWORD)(LPVOID)& mciplayparms);
SetTimer(TIMER_ID, 1000, NULL);
}
DWORD CAudioSeparatorDlg::getinfo(DWORD item)
{
MCI_STATUS_PARMS mcistatusparms;
mcistatusparms.dwCallback=(DWORD)GetSafeHwnd();
mcistatusparms.dwItem=item;
mcistatusparms.dwReturn=0;
mciSendCommand(m_count,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)&mcistatusparms);
return mcistatusparms.dwReturn;
}
void CAudioSeparatorDlg::StopPlay()
{
cdfrom=MCI_MAKE_HMS(0,0,0);
mciSendCommand(m_count,MCI_CLOSE,0,NULL);
m_count=0;
KillTimer(TIMER_ID);
}
DWORD cdfrom,cdto;
int hour,minute,second;
DWORD cdlen;
DWORD getinfo(DWORD item);
DWORD m_count;
// play a segment WAVE
void CAudioSeparatorDlg::PlayWaveSegment(CString &strFile, int &nSecond)
{
MCI_OPEN_PARMS mciopenparms;//打开
MCI_PLAY_PARMS mciplayparms;//播放
mciopenparms.lpstrElementName=strFile;//播放路径
mciopenparms.lpstrDeviceType=NULL;//文件类型
mciSendCommand(0,MCI_OPEN,MCI_DEVTYPE_WAVEFORM_AUDIO,(DWORD)(LPVOID)&mciopenparms);//向MCI设备发送命令消息
m_count=mciopenparms.wDeviceID;
mciplayparms.dwCallback=(DWORD)GetSafeHwnd();
cdlen=getinfo(MCI_STATUS_LENGTH); //得到曲目长度
cdto=MCI_MAKE_HMS(MCI_HMS_HOUR(cdlen),MCI_HMS_MINUTE(cdlen),MCI_HMS_SECOND(cdlen));
cdfrom=MCI_MAKE_HMS(0,0,0);
//mciplayparms.dwFrom=cdfrom;
mciplayparms.dwFrom = (nSecond * 1000); // wave data offset, here play
mciplayparms.dwTo = cdto;
if(mciplayparms.dwFrom > cdlen || mciplayparms.dwTo > cdlen)
{
StopPlay();
}
mciSendCommand(m_count,MCI_PLAY,MCI_TO|MCI_FROM,(DWORD)(LPVOID)& mciplayparms);
SetTimer(TIMER_ID, 1000, NULL);
}
DWORD CAudioSeparatorDlg::getinfo(DWORD item)
{
MCI_STATUS_PARMS mcistatusparms;
mcistatusparms.dwCallback=(DWORD)GetSafeHwnd();
mcistatusparms.dwItem=item;
mcistatusparms.dwReturn=0;
mciSendCommand(m_count,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)&mcistatusparms);
return mcistatusparms.dwReturn;
}
void CAudioSeparatorDlg::StopPlay()
{
cdfrom=MCI_MAKE_HMS(0,0,0);
mciSendCommand(m_count,MCI_CLOSE,0,NULL);
m_count=0;
KillTimer(TIMER_ID);
}
本文介绍了一种使用MCI(Multimedia Control Interface)在C++中实现播放指定时间段内音频文件的方法。通过MCI命令打开并播放音频文件,同时能够精确控制播放的起始时间和结束时间。
2136

被折叠的 条评论
为什么被折叠?



