第10章媒体控制接口 10.1MCI设备类型 10.2MCI编程步骤 103使用 MCIWnd窗口类
第10章媒体控制接口 10.1 MCI设备类型 10.2 MCI编程步骤 10.3使用MCIWnd窗口类
101MCI设备类型 媒体控制接口允许控制两类设备:第一类为简单设备,是指那些不需要文件 的设备,如CD音频播放设备;第二类为复合设备,是那些需要文件的设备 如数字视频及波形音频设备等。表列出了目前已定义的设备的标识符。 表101MCI设备类型 设备类型 说明 设备类型 说明 amadon 动画设备 scanner 图形扫描设备 CD音频设备 ncer MD设备 dat 数字音频磁带机 录相机设备 talⅵdo 数字视频设备 影碟播放设备 未定义的M设备 waveaulio 波形音频设备 overla y 窗口中的模拟设备
10.1 MCI设备类型 媒体控制接口允许控制两类设备:第一类为简单设备,是指那些不需要文件 的设备,如CD音频播放设备;第二类为复合设备,是那些需要文件的设备, 如数字视频及波形音频设备等。表列出了目前已定义的设备的标识符
102MCI编程步骤 打开设备 MCI为不同的多媒体设备打开提供相应的数据结构类型。若不想使用设备中特定的参 数数据,则可使用统一的 MCI OPEN_ PARMS结构,原型: ypedef struct k DWoRd dw Callback, ∥/低字节用于 MCI NOTIFY的窗口句柄 MCIDEVICEID WDeviceID;∥返回的设备标识符 LPCSTR pstr Device Type;∥/MCI设备的类型 LPCSTR pstrElementName ∥/设备元素 LPCSTR pstrAlias: ∥/可选的设备别名 3 MCI_OPEN_ PARMS 打开多媒体设备的过程:定义一个 MCI OPEN_ PARMS结构类型变量,给结构变量中 的相应参数赋值,调用 mciSend Command向设备发送 MCI OPEN命令消息,成功调用 时,可获得相应的设备标识符。例如,下面的代码是打开波形音频设备 WORD WDeviceID /MCI设备ID CString fileName: ∥/波形文件名 MCI OPEN PARMS open Parms ∥/MCI设备打开参数 open Parms. IpstrDevice Type=" waveaudio";∥/波形音频设备 open Parms. Ipstr ElementName fileName if(mciSend Command(NULL MCI_ OPEN MCI_OPEN_ELEMENT MCI_OPEN_TYPE (DWORD)(LPVOID) &open Parms)) return FALSE, wDeviceId= open Parms. wDeviceID
10.2 MCI编程步骤 ➢ 打开设备 MCI为不同的多媒体设备打开提供相应的数据结构类型。若不想使用设备中特定的参 数数据,则可使用统一的MCI_OPEN_PARMS结构,原型: typedef struct { DWORD dwCallback; // 低字节用于MCI_NOTIFY的窗口句柄 MCIDEVICEID wDeviceID; // 返回的设备标识符 LPCSTR lpstrDeviceType; // MCI设备的类型 LPCSTR lpstrElementName; // 设备元素 LPCSTR lpstrAlias; // 可选的设备别名 } MCI_OPEN_PARMS; 打开多媒体设备的过程:定义一个MCI_OPEN_PARMS结构类型变量,给结构变量中 的相应参数赋值,调用mciSendCommand向设备发送MCI_OPEN命令消息,成功调用 时,可获得相应的设备标识符。例如,下面的代码是打开波形音频设备: WORD wDeviceID; // MCI设备ID CString fileName; // 波形文件名 ... MCI_OPEN_PARMS openParms; // MCI设备打开参数 openParms.lpstrDeviceType = "waveaudio"; // 波形音频设备 openParms.lpstrElementName = fileName; if (mciSendCommand (NULL, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_OPEN_TYPE, (DWORD)(LPVOID) &openParms)) return FALSE; wDeviceID = openParms.wDeviceID;
102MCI编程步骤 >设置或获取设备信息 使用 MCI SET和 MCI STATUS命令可以用来设置和获取设备信息,在用函数 mciSendCommand发送命令时,使用相应的 MCI SET PARMS和 MCI STATUS PARMS结构。原型 typedef struct dWord caLlback;∥/低字节用于 MCI NOTIEY的窗口句柄 dword dwtimeformat ∥/时间格式 dword dwaudio ∥/输出声道 3 MCI_ SET_ PARMS, typedef struct { Dword dwCallback;∥/低字节用于 MCI NOTIFY的窗口句柄 dword dwReturn ∥/要获取的设备信息 DWORD dwItem; ∥/需要获取的信息项 dword dwTrack ∥/曲目的长度或曲目号 3 MCI_ STATUS PARMS 例如,下面的代码是将波形音频设备的时间格式设成毫秒 MCI SET_ PARMS setParms setParms. dw TimeFormat=MCI FORMAT MILLISECONDS if (mciSend Command( DeviceID, MCI_ SET, MCI_ SET_TIME_ FORMAT (DWORD)(LPVOID) &setParms)) return FALSEr
10.2 MCI编程步骤 ➢ 设置或获取设备信息 使用MCI_SET和MCI_STATUS命令可以用来设置和获取设备信息,在用函数 mciSendCommand发送命令时,使用相应的MCI_SET_PARMS和 MCI_STATUS_PARMS结构。原型: typedef struct { DWORD dwCallback; // 低字节用于MCI_NOTIFY的窗口句柄 DWORD dwTimeFormat; // 时间格式 DWORD dwAudio; // 输出声道 } MCI_SET_PARMS; typedef struct { DWORD dwCallback; // 低字节用于MCI_NOTIFY的窗口句柄 DWORD dwReturn; // 要获取的设备信息 DWORD dwItem; // 需要获取的信息项 DWORD dwTrack; // 曲目的长度或曲目号 } MCI_STATUS_PARMS; 例如,下面的代码是将波形音频设备的时间格式设成毫秒: MCI_SET_PARMS setParms; setParms.dwTimeFormat=MCI_FORMAT_MILLISECONDS; if (mciSendCommand(wDeviceID, MCI_SET, MCI_SET_TIME_FORMAT, (DWORD)(LPVOID) &setParms)) return FALSE;
102MCI编程步骤 播放设备 使用MCI_PLAY命令可以使设备播放多媒体文件,并在用函数 mcisendcommand发送命令时,使用相应的 MCI PLAY PARMS结构,其原 型如下 typedef struct { DWORD caLlback;∥/低字节用于 MCI NOTIFY的窗口句柄 dWoRd dwFrom ∥/播放的起点位置 DWORD wTO ∥/播放的终点位置 S MCI PLAY_ PARMS, 例如,下面的代码是播放波形音频设备 MCI_PLAY_ PARMS play Parms, ∥/定位到开始位置 mciSendCommand (wDeviceID, MCI_ SEEK, MCI_SEEK_TO_ START, NULL) ∥/播放设备 if (mciSendCommand (w DeviceID, MCI_ PLAY, NULL (DWORD)(LPVOID) &play Parms)) return false else return TRUEr
10.2 MCI编程步骤 ➢ 播放设备 使用MCI_PLAY命令可以使设备播放多媒体文件,并在用函数 mciSendCommand发送命令时,使用相应的MCI_PLAY_PARMS结构,其原 型如下: typedef struct { DWORD dwCallback; // 低字节用于MCI_NOTIFY的窗口句柄 DWORD dwFrom; // 播放的起点位置 DWORD dwTo; // 播放的终点位置 } MCI_PLAY_PARMS; 例如,下面的代码是播放波形音频设备: MCI_PLAY_PARMS playParms; // 定位到开始位置 mciSendCommand (wDeviceID, MCI_SEEK, MCI_SEEK_TO_START, NULL); // 播放设备 if (mciSendCommand (wDeviceID, MCI_PLAY, NULL, (DWORD)(LPVOID) &playParms)) return FALSE; else return TRUE;