MCI_windows编程实现实例

更新时间:2023-06-10 07:12:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

MCI_windows编程实现实例

MCI接口编程实验

一、实验目的

熟悉Windows下声卡编程的基本过程及原理,掌握Windows下MCI编程的基本知识。

二、预备知识

VC5编程方法、MCI编程方法。

三、实验原理

设计多媒体程序,关键是对多种媒体设备的控制和使用,在WindowsXP和Windows95系统中,对多媒体设备进行控制主要有三种方法:第一种方法是使用微软公司窗口系统中对多媒体支持的MCI,即媒体控制接口,MCI是多媒体设备和多媒体应用软件之间进行设备无关的沟通的桥梁。在VB和VC中,MCI都得到了很好的支持。第二种方法,通过调用Windows的API(应用程序接口)多媒体相关函数实现媒体控制。第三种方法是使用OLE(Object Linking & Embedding),即对象链接与嵌入技术,它为不同软件之间共享数据和资源提供了有力的手段。

我们在本实验中用最简单的方法来实现声音的播放和录制—媒体控制接口编程。有关知识请阅读附录中“VC多媒体”部分。

四、实验要求

本实验非常简单和基础,请已经熟悉VC和MCI这些内容的同学耐心地再做一遍。请同学们参照示例中的程序代码,编制自己的声卡程序并应用各种声音播放的方法。具体要求如下:

1. 学会使用PlaySound()、SndPlaySound()来播放WAV文件;

2. 学会使用mciSendCommand()或mciSendString()来播放WAV文件;

3. 学会使用mciSendCommand()或mciSendString()来录制WAV文件;

4. 实验完成以后,需要实验室老师检查通过。

5. 在意思清楚、完整的前提下,思考题的回答越精炼越好。

6. 在以上基本要求完成的前提下,有能力的同学可以试一下用MCI接口播放其他格式的文件;制作一个媒体播放器。

MCI_windows编程实现实例

五、使用示例

1. sndPlaySound("ding.wav",SND_SYNC);

2. PlaySound("chord.wav",NULL,SND_SYNC );

3. 使用两个高级MCI函数

a. 播放MIDI文件示例

{

HWND hwnd;

MCI_OPEN_PARMS mciopen;

MCI_OPEN_PARMS mciplay;

DWORD rtrn;

char b[80];

hwndGetActiveWindow()->m_hWnd;

= mciopen.lpstrElementName = "e:\\test\\test.rmi";

rtrn = mciSendCommand(0,MCI_OPEN,MCI_OPEN_TYPE|MCI_OPEN_ELEMENT, (DWORD)(LPVOID)&mciopen); if(rtrn != 0){

mciGetErrorString(rtrn,(LPSTR)b,80);

::MessageBox(hwnd,b,"MCI ERROR!",MB_OK);

}

wDeviceID = mciopen.wDeviceID; mciplay.dwCallback = (DWORD)hwnd; rtrn = mciSendCommand(wDeviceID,MCI_PLAY,MCI_NOTIFY,(DWORD)(LPVOID)&mciplay); if (rtrn != 0L){ mciopen.lpstrDeviceType = "sequencer" ; =

mciGetErrorString(rtrn,(LPSTR)b,80);

::MessageBox(hwnd,b,"MCI Error",MB_OK);

mciSendCommand(wDeviceID,MCI_CLOSE,0,NULL);

}

}

//停止播放

{

HWND hwnd;

MCI_GENERIC_PARMS mcistop;

hwndGetActiveWindow()->m_hWnd;

} mcistop.dwCallback = (DWORD)hwnd; mciSendCommand(MCI_DEVTYPE_SEQUENCER,MCI_STOP,0,(DWORD)(LPVOID)&mcistop);

MCI_windows编程实现实例

b.

{ 录音示例 =

HWND hwnd;

MCI_OPEN_PARMS mciopen;

MCI_RECORD_PARMS mci1;

MCI_SAVE_PARMS mcisave;

DWORD rtrn;

char b[80];

hwndGetActiveWindow()->m_hWnd;

rtrn = mciSendCommand(0,MCI_OPEN,MCI_OPEN_TYPE|MCI_OPEN_ELEMENT, (DWORD)(LPVOID)&mciopen); if(rtrn != 0){

mciGetErrorString(rtrn,(LPSTR)b,80);

::MessageBox(hwnd,b,"MCI ERROR!",MB_OK);

} = wDeviceID = mciopen.wDeviceID;

mci1.dwCallback = (DWORD)hwnd; rtrn = mciSendCommand(wDeviceID,MCI_RECORD,MCI_NOTIFY,(DWORD)(LPVOID)&mci1); if (rtrn != 0L){ mciopen.lpstrElementName = "e:\\ding.wav"; mcisave.lpfilename = "e:\\ding.wav"; mciopen.lpstrDeviceType = "waveaudio";

mciGetErrorString(rtrn,(LPSTR)b,80);

::MessageBox(hwnd,b,"MCI Error",MB_OK);

mciSendCommand(wDeviceID,MCI_CLOSE,0,NULL);

}

}

//保存到文件并停止录音

{

HWND hwnd;

MCI_SAVE_PARMS mcisave;

MCI_OPEN_PARMS mciopen;

DWORD rtrn;

char b[80];

hwndGetActiveWindow()->m_hWnd;

mcisave.dwCallback = (DWORD)hwnd; mciopen.lpstrElementName = "e:\\ding.wav"; mcisave.lpfilename = "e:\\ding.wav"; mciopen.lpstrDeviceType = "waveaudio";

MCI_windows编程实现实例

rtrn = mciSendCommand(wDeviceID,MCI_SAVE,MCI_NOTIFY,(DWORD)(LPVOID)&mcisave); if (rtrn != 0L){

mciGetErrorString(rtrn,(LPSTR)b,80);

::MessageBox(hwnd,b,"MCI Error save",MB_OK);

mciSendCommand(wDeviceID,MCI_CLOSE,0,NULL);

}

}

c. 实验示例

现给出VC5下的声卡编程样本程序test.exe及其源代码。请同学们参照。

六、思考题

1 什么是MCI接口?简述MCI所囊括的内容。

2 Windows下播放波形文件可以采用几种方法,各有什么优缺点? 3 简述Windows下多媒体程序开发的特点。

本文来源:https://www.bwwdw.com/article/2y51.html

Top