VC在应用程序中播放声音文件
2014-06-30 11:07
351 查看
在VC中播放声音文件一共有两种方法:不要忘记,在文件开始加入:#include <mmsystem.h>
#pragma comment(lib,"winmm.lib") 1.打开文件夹,选择音乐播放:(1)OnOpenFile()//在打开文件函数中,获取wav文件路径 CFileDialog pCFileDialog(true,NULL , NULL, 0, "wav文件(*.wav)|*.wav");
pCFileDialog.m_ofn.lpstrTitle = "打开音乐"; //对话框名字
if(pCFileDialog.DoModal())
{
//获取文件路径与名称;
m_strMusicFilename = pCFileDialog.GetPathName();
}(2)OnPlay() //播放按钮响应函数sndPlaySound(m_strMusicFilename,SND_LOOP|SND_ASYNC);这里注意:
所以,第二个参数为:SND_LOOP|SND_ASYNC(3)OnStop()//停止按钮响应函数sndPlaySound(NULL, SND_ASYNC);//这里第二个参数我是随便写的,不知道有没有什么影响,目前使用还算正常2.将音乐文件添加到资源当中:为了保证程序的完整性,首先用文本编辑器(如记事本)打开应用程序的资源文件(.rc文件),在最后加入自己的声音资源,如下IDW W***E "res\\Sound1.wav",并保存资源文件。说明:IDW为声音资源的ID号, W***E为文件资源类型,后面"res\\Sound1.wav"为当然,开发人员也可以通过Visual C++的IDE环境向程序添加声音资源,这不是本实例讲述的重点,所以不再赘述。
一般情况下,为了实现启动画面和声音同时播放的效果,可以在应用程序中要播放声音的地方启动另一线程,用来播放声音,虽然本实例没有启动画面,但是还是在一个线程中来实现声音资源文件的播放。启动线程的代码如下:
上述函数中sound为一个回调函数,该函数首先用AfxGetInstanceHandle()函数获得应用程序实例的句柄,然后用函数FindResource()函数找到声音资源,该函数原型如下:
函数中参数hModule为模块句柄,lpName为资源名,lpType为资源类型名。
找到声音资源后,用LoadResource()函数加装载资源,该函数原型如下:
函数中参数hModule为模块句柄,hResInfo为资源句炳。
最后调用LockResource()函数锁定资源内存块,并返回所标定内存块的虚拟内存地址。如果该资源被成功锁定的话,则返回值指向该资源开始处的第一个字节。注意:若上述四步中的任何一步发生问题,则返回并释放相应的内存。接下去要做的事情就是使用sndPlaySound()函数来播放声音资源文件了。
二、编程步骤
1、 启动Visual C++6.0,生成一个单文档视图结构的应用程序,将该程序命名为"PlaySound";
2、 使用Class Wizard在应用程序的视图类中添加鼠标"左键按下"的消息响应函数,同时为程序添加声音文件资源IDW;
3、 添加代码,编译运行程序;
三、程序代码
#pragma comment(lib,"winmm.lib") 1.打开文件夹,选择音乐播放:(1)OnOpenFile()//在打开文件函数中,获取wav文件路径 CFileDialog pCFileDialog(true,NULL , NULL, 0, "wav文件(*.wav)|*.wav");
pCFileDialog.m_ofn.lpstrTitle = "打开音乐"; //对话框名字
if(pCFileDialog.DoModal())
{
//获取文件路径与名称;
m_strMusicFilename = pCFileDialog.GetPathName();
}(2)OnPlay() //播放按钮响应函数sndPlaySound(m_strMusicFilename,SND_LOOP|SND_ASYNC);这里注意:
SND_LOOP | The sound plays repeatedly until sndPlaySound is called again with thelpszSoundName parameter set to NULL. You must also specify the SND_ASYNC flag to loop sounds. |
一般情况下,为了实现启动画面和声音同时播放的效果,可以在应用程序中要播放声音的地方启动另一线程,用来播放声音,虽然本实例没有启动画面,但是还是在一个线程中来实现声音资源文件的播放。启动线程的代码如下:
AfxBeginThread((AFX_THREADPROC)sound,NULL,THREAD_PRIORITY_NORMAL);
上述函数中sound为一个回调函数,该函数首先用AfxGetInstanceHandle()函数获得应用程序实例的句柄,然后用函数FindResource()函数找到声音资源,该函数原型如下:
HRSRC FindResource( HMODULE hModule, // module handle LPCTSTR lpName, // resource name LPCTSTR lpType // resource type )
函数中参数hModule为模块句柄,lpName为资源名,lpType为资源类型名。
找到声音资源后,用LoadResource()函数加装载资源,该函数原型如下:
HGLOBAL LoadResource( HMODULE hModule, // module handle HRSRC hResInfo // resource handle );
函数中参数hModule为模块句柄,hResInfo为资源句炳。
最后调用LockResource()函数锁定资源内存块,并返回所标定内存块的虚拟内存地址。如果该资源被成功锁定的话,则返回值指向该资源开始处的第一个字节。注意:若上述四步中的任何一步发生问题,则返回并释放相应的内存。接下去要做的事情就是使用sndPlaySound()函数来播放声音资源文件了。
二、编程步骤
1、 启动Visual C++6.0,生成一个单文档视图结构的应用程序,将该程序命名为"PlaySound";
2、 使用Class Wizard在应用程序的视图类中添加鼠标"左键按下"的消息响应函数,同时为程序添加声音文件资源IDW;
3、 添加代码,编译运行程序;
三、程序代码
/////////////////////////////////////////////////////////// void CPlaySoundView::OnLButtonDown(UINT nFlags, CPoint point) { AfxBeginThread((AFX_THREADPROC)sound,NULL,THREAD_PRIORITY_NORMAL); CView::OnLButtonDown(nFlags, point); } UINT CPlaySoundView::sound(LPVOID pParam) { HINSTANCE h=AfxGetInstanceHandle(); HRSRC hr=FindResource(h,"IDW","W***E"); HGLOBAL hg=LoadResource(h,hr); LPSTR lp=(LPSTR)LockResource(hg); sndPlaySound(lp,SND_MEMORY|SND_SYNC); FreeResource(hg); return 0; }
相关文章推荐
- VC资源文件中加入自己的声音资源,使自己的应用程序可以播放声音
- vc在应用程序中播放声音资源文件
- 在应用程序中播放声音资源文件
- VC中使用低级音频函数WaveX播放声音文件
- VC++中使用低级音频函数WaveX播放声音文件
- vc播放声音文件
- vc播放声音文件
- VC中使用低级音频函数WaveX播放声音文件
- VC中使用低级音频函数WaveX播放声音文件
- 在应用程序中播放声音资源文件
- 在应用程序中播放声音资源文件
- VC中使用低级音频函数WaveX播放声音文件
- C#编写Windows桌面应用程序播放MP3声音文件
- vc 播放声音文件
- VC中使用低级音频函数WaveX播放声音文件
- vc播放声音文件
- VC++中播放声音文件的几种不同方法
- 在网页上播放声音文件的方式
- flash as3使用,播放声音和加载外部声音文件
- [转]在网页中加入声音文件,并且用JavaScript对其进行播放控制