C++播放声音总结
Dec 21, 2013
程序中经常要用到声音,无论是简单的“滴答”,还是一小段乐谱,或者是一首CD。下面就总结一下目前我所知道的C++播放声音的方法。
1.播放系统消息声音 #
在平时使用Windows系统的时候,会经常遇到系统的提醒、警告、错误声音。这种使用MessageBeep实现。函数原型如下
BOOL WINAPI MessageBeep(
_In_ UINT uType
);
MessageBeep: Plays a waveform sound. The waveform sound for each sound type is identified by an entry in the registry. 播放一个波形声音文件。这个波形声音对应的类型都是注册表中的一项。
使用方法如下
MessageBeep(MB_OK);
Sleep(3000);
MessageBeep(MB_ICONWARNING);
Sleep(3000);
MessageBeep(MB_ICONSTOP);
Sleep(3000);
MessageBeep(MB_ICONERROR);
Sleep(3000);
MessageBeep(MB_ICONEXCLAMATION);
2.播放wav格式声音 #
播放wav格式声音可以使用PlaySound函数,
BOOL PlaySound(
LPCTSTR pszSound,
HMODULE hmod,
DWORD fdwSound
);
PlaySound: The PlaySound function plays a sound specified by the given file name, resource, or system event. 播放一个wav声音,或者是指定路径的wav文件,或者是一个资源,或者是一个系统事件对应的声音。
pszSound指定要播放的声音;fdwSound指定播放声音的类型和播放方式;hmod通常设为NULL,如果声音是资源文件,则设为包含资源文件的模块。
比如
#include <Mmsystem.h>
#pragma comment(lib,"Winmm.lib")
//播放指定路径wav文件
PlaySound(TEXT("recycle.wav"), NULL, SND_FILENAME);//系统声音,清空回收站的声音
PlaySound(TEXT("c:\\love.wav"), NULL, SND_FILENAME);//用户指定声音文件
//播放资源文件中的声音
PlaySound(MAKEINTRESOURCE(IDR_WAVE1), GetModuleHandle(NULL),SND_RESOURCE);//资源中声音
//播放系统事件声音
PlaySound(TEXT("SystemStart"), NULL, SND_ALIAS);//开机声音
Windows的声音有许多,像recycle.wav就这C:\Windows\Media目录下(XP),系统事件如例程中的SystemStart也在该目录下(Windows XP 启动.wav)。这个目录下面还有其他的声音。
3.利用MCI接口播放任意格式声音 #
MCI,Media Control Interface,媒体控制接口,是Windows系统提供给应用程序的媒体控制接口,很好很强大。关于MCI的更多使用,我将在以后专门讲解。这里指提供一个简单的例子。
#include <mmsystem.h> //导入声音头文件库
#pragma comment(lib,"winmm.lib")//导入声音的链接库
mciSendString("open C:/123.mp3" , NULL, 0, 0);
mciSendString("play C:/123.mp3 ", NULL, 0, 0);
4.强悍的MCIWndCreate()函数
MCIWndCreate()函数向系统注册一个MCIWnd 窗口类,并创建一个MCIWnd窗口,控制使用MCI设备。它不仅可以播放各种声音,还可以播放AVI文件。
#include <Vfw.h>
//#pragma comment(lib,"Vfw32.lib")
int type=MCIWNDF_SHOWALL|MCIWNDF_SHOWNAME; //播放控制条显示方式
CString filename="C:/123.mp3"; //要播放的文件
//创建一个播放窗口
HWND m_hwndMCI=MCIWndCreate(m_hWnd,AfxGetInstanceHandle(),type,filename);
//开始播放
MCIWndPlay(m_hwndMCI);
/*if(m_hwndMCI!=NULL) {MCIWndDestroy(m_hwndMCI);}*///销毁MCIWND 窗口
5. Windows Media Player 控件 #
VC++6.0中,打开 project–>add to project–>Components and Controls –>Registered ActiveX Controls,找到Windows Media Player控件。
Insert这个控件后,我们project中会自动添加17个类,这些都是Windows Media Player 控制相关,同时我们UI设计时的tools bar 中会多出一个控件,那就 Windows Media Player ,拖到窗口上就能使用。
将Windows Media Player控件拖动到自己的对话框窗口,并把该控件关联成Control 类型的变量,如m_ctlWMPlayer,在需要播放音乐的地方,调用其成员函数SetUrl即可播放该文件,如
m_ctrWMPlayer.SetUrl("C:/123.mp3")
2013-5-25 22:11::00 更新
6. 播放蜂鸣 #
使用Beep函数播放不同频率的蜂鸣
BOOL WINAPI Beep(
__in DWORD dwFreq, //频率
__in DWORD dwDuration //持续时间
);
如
while(1) Beep(5000,500);
该文2010-08-03 19:46首发于我的CSDN专栏。有改动。