26.1.2 可以选择播放曲目的CD播放器
Windows API中提供了一组MCI函数,即媒体控制接口。提供了播放多媒体设备和录制多媒体资源文件的标准命令。这些命令为多种多媒体设备提供同一的访问接口。mciGetDeviceID()函数获取指定名称的设备标识符。其函数原型为:
- MCIDEVICEID mciGetDeviceID( LPCTSTR lpszDevice );
参数lpszDevice用于指定设备名称或已知的设备别名。函数会返回与打开的设备相连的设备标识符。如果返回值为0,表示获取关联的设备ID发生错误。返回的设备ID,可以用在mciSendCommand()函数中,对设备进行操作。mciSendCommand()函数原型为:
- MCIERROR mciSendCommand(
- MCIDEVICEID IDDevice, // 指定命令消息的MCI设备标识符
- UINT uMsg, // 指定命令消息,
可以执行播放、暂停、快进等多种操作 - DWORD fdwCommand, // 表示命令消息的选项
- DWORD dwParam ); // 包含命令消息的参数结构地址
调用mciSendCommand()函数可以向指定的MCI设备发送命令消息。如果操作成功,返回0,否则返回错误代码。使用mciGetErrorString()函数可以获取错误代码所代表的原因。下面代码演示了使用MCI函数如何播放指定曲目的CD。
- void CSoundSampleDlg::OnButtonPlaycd()
// 播放CD曲目 - {
- UpdateData(true);
// 获取数据 - MCIDEVICEID deviceID = mciGetDeviceID("G:\\");
// 获取光驱G盘 - DWORD dwPlay = m_Volumn;
// 获取音量 - DWORD dwFlags;
- MCI_DGV_PLAY_PARMS mciPlay;
// 定义播放参数 - mciPlay.dwCallback = MAKELONG(m_hWnd,0);
// 设置回放窗体句柄 - mciPlaymciPlay.dwFrom = mciPlay.dwTo = dwPlay;
- dwFlags = MCI_NOTIFY;
// 设置通知消息 - dwFlags |= MCI_DGV_PLAY_REVERSE;
// 设置播放消息 - MCIERROR mciError;
- // 发送播放消息
- if ((mciError=mciSendCommand(deviceID, MCI_PLAY,
- dwFlags, (DWORD)(LPMCI_DGV_
PLAY_PARMS)&mciPlay)) == 0) - WriteLog("正在播放曲目……");
- Else
- // 如果失败,输出错误提示
- {
- char szErrorText[500]={0};
- mciGetErrorString(mciError, szErrorText, sizeof(szErrorText));
- WriteLog(szErrorText);
- }
- }
上面代码,使用mciGetDeviceID()函数获取CD播放器的设备ID,然后通过mciSendCommand()函数播放编辑框中用户输入的曲目序号的CD曲目。其中,第二个参数MCI_PLAY表示播放曲目,而MCI_DGV_PLAY_PARMS结构用于指定播放参数,dwFrom和dwTo表示要播放曲目的开始序号和结束序号。如果在播放时发生错误,则调用mciGetErrorString()函数返回失败原因,并在日志编辑框中显示出来。