The VC++6.0 C++ source code for playing wave file

本文介绍了一种使用MCI(Multimedia Control Interface)在C++中实现播放指定时间段内音频文件的方法。通过MCI命令打开并播放音频文件,同时能够精确控制播放的起始时间和结束时间。
    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);
}
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值