收藏 分享(赏)

函数PlaySound和sndPlaySound的用法(delphi).doc

上传人:mcady 文档编号:6981240 上传时间:2019-04-29 格式:DOC 页数:6 大小:46KB
下载 相关 举报
函数PlaySound和sndPlaySound的用法(delphi).doc_第1页
第1页 / 共6页
函数PlaySound和sndPlaySound的用法(delphi).doc_第2页
第2页 / 共6页
函数PlaySound和sndPlaySound的用法(delphi).doc_第3页
第3页 / 共6页
函数PlaySound和sndPlaySound的用法(delphi).doc_第4页
第4页 / 共6页
函数PlaySound和sndPlaySound的用法(delphi).doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、函数 PlaySound 和 sndPlaySound 的用法2008 年 07 月 11 日 星期五 08:57一.PlaySound 函数的声明为:BOOL PlaySound(LPCSTR pszSound,HMODULE hmod,DWORD fdwSound);1.参数 pszSound:是指定了要播放声音的字符串,该参数可以是 WAVE 文件的名字,或是 WAVE 资源的名字,或是内存中声音数据的指针,或是在系统注册表 WIN.INI 中定义的系统事件声音.如果该参数为 NULL 则停止正在播放的声音.2.参数 hmod:是应用程序的实例句柄,当播放 WAV 资源时要用到该参数,否

2、则它必须为 NULL.3.参数 fdwSound: 是标志的组合,如下表所示。若成功则函数返回 TRUE,否则返回 FALSE。二播放标志以及含义:SND_APPLICATION用应用程序指定的关联来播放声音。SND_ALIASpszSound 参数指定了注册表或 WIN.INI 中的系统事件的别名。SND_ALIAS_IDpszSound 参数指定了预定义的声音标识符。SND_ASYNC用异步方式播放声音,PlaySound 函数在开始播放后立即返回。SND_FILENAMEpszSound 参数指定了 WAVE 文件名。SND_LOOP重复播放声音,必须与 SND_ASYNC 标志一块使用

3、。SND_MEMORY播放载入到内存中的声音,此时 pszSound 是指向声音数据的指针。SND_NODEFAULT不播放缺省声音,若无此标志,则 PlaySound 在没找到声音时会播放缺省声音。SND_NOSTOPPlaySound 不打断原来的声音播出并立即返回 FALSE。SND_NOWAIT如果驱动程序正忙则函数就不播放声音并立即返回。SND_PURGE停止所有与调用任务有关的声音。若参数 pszSound 为 NULL,就停止所有的声音,否则,停止pszSound 指定的声音。SND_RESOURCEpszSound 参数是 WAVE 资源的标识符,这时要用到 hmod 参数。S

4、ND_SYNC同步播放声音,在播放完后 PlaySound 函数才返回。三函数使用方法及代码:注意:在使用函数前要加入:#include “mmsystem.h“/导入声音头文件#pragma comment(lib,“winmm.lib“)/导入声音头文件库直接播出声音文件:PlaySound(“c:win95mediaThe Microsoft Sound.wav“, NULL, SND_FILENAME | SND_ASYNC);注意:参数中的路径使用两个连续的反斜杠转义代表一个反斜杠。把声音文件加入到资源中,然后从资源中播放声音:Visual C+支持 WAVE 型资源,用户在资源视图

5、中单击鼠标右键并选择 Import 命令,然后在文件选择对话框中选择 The Microsoft Sound.wav 文件,则该文件就会被加入到 WAVE 资源中。假定声音资源的ID 为 IDR_STARTWIN,则下面的调用同样会输出启动声音:PlaySound(LPCTSTR)IDR_STARTWIN, AfxGetInstanceHandle(), SND_RESOURCE | SND_ASYNC);或:PlaySound(MAKEINTRESOURCE(IDR_WAVE2),AfxGetResourceHandle(),SND_ASYNC|SND_RESOURCE|SND_NODEFA

6、ULT|SND_LOOP);/将声音文件写入到程序中用 PlaySound 播放系统声音:Windows 启动的声音是由 SystemStart 定义的系统声音,因此可以用下面的方法播放启动声音:PlaySound(“SystemStart“,NULL,SND_ALIAS|SND_ASYNC);/ sndPlaySound 函数的声明为:BOOL sndPlaySound(LPCSTR lpszSound, UINT fuSound);用法:除了不能指定资源名字外,参数 lpszSound 与 PlaySound 的是一样的。参数 fuSound 是如何播放声音的标志,可以是 SND_ASYN

7、C、SND_LOOP、SND_MEMORY、SND_NODEFAULT、SND_NOSTOP 和 SND_SYNC 的组合,这些标志的含义与 PlaySound 的一样。可以看出,sndPlaySound 不能直接播放声音资源。要用该函数播放 WAVE 文件,可按下面的方式调用:sndPlaySound(“MYSOUND.WAV”,SND_ASYNC);VC+中播放声音的方法发布者: soarlove声音是多媒体的一个重要组成部分,在应用程序中加入声音可以使界面更友好。在 VC+中可以根据不同的应用要求,用不同的方法实现声音的播放。一播放声音文件的简单方法在 VC+ 中的多媒体动态连接库中提供

8、了一组与音频设备有关的函数。利用这些函数可以方便地播放声音。最简单的播放声音方法就是直接调用 VC+中提供的声音播放函数 BOOL sndPlaySound ( LPCSTR lpszSound,UINT fuSound );或 BOOL PlaySound( LPCSTR lpszSound, HMODULE hmod, DWORD fuSound );其中参数 lpszSound 是需要播放声音的.WAV 文件的路径和文件名, hmod 在这里为 NULL,fuSound 是播放声音的标志,详细说明请参考 VC+中的帮助。 例如播放 C:soundmusic.wav 可以用 sndPlay

9、Sound (“c:soundmusic.wav“,SND_ASYNC);或 PlaySound(“c:soundmusic.wav“,NULL, SND_ASYNC|SND_NODEFAULT );如果没有找到 music.wav 文件,第一种格式将播放系统默认的声音,第二种格式不会播放系统默认的声音二将声音文件加入到程序中在 VC+的程序设计中,可以利用各种标准的资源,如位图,菜单,对话框等。同时 VC+也允许用户自定义资源,因此我们可以将声音文件作为用户自定义资源加入程序资源文件中,经过编译连接生成 EXE 文件,实现无.WAV 文件的声音播放。要实现作为资源的声音文件的播放,首先要在资

10、源管理器中加入待播放的声音文件(实现过程并不复杂,这里不在叙述)。假设生成的声音文件资源标识符为 IDR_WAVE1。在播放时只需要调用下面的语句: PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(), SND_ASYNC|SND_RESOURCE|SND_NODEFAULT|SND_LOOP);其中 MAKEINTRESOURCE()宏将整数资源标识符转变为字符串,AfxGetResourceHandle()函数返回包含资源的模块句柄,SND_RESOURCE 是必须的标志。作为资源的声音文件的第二种播放方法是把资源读入内存

11、后作为内存数据播放。具体步骤入下:1获得包含资源的模块句柄:HMODULE hmod=AfxGetResourceHandle(); 2检索资源块信息:HRSRC hSndResource=FindResource(hmod,MAKEINTRESOURCE(IDR_WAVE1),_T(“WAVE“);3. 装载资源数据并加锁:HGLOBAL hGlobalMem=LoadResource(hmod,hSndResource);LPCTSTR lpMemSound=(LPCSTR)LockResource(hGlobalMem);4播放声音文件:sndPlaySound(lpMemSound,S

12、ND_MEMORY);5释放资源句柄:FreeResource(hGlobalMem); 三播放声音文件的高级方法在 VC+中提供了一组对音频设备及多媒体文件直接进行操作的函数。利用这些函数可以灵活地对声音文件进行各种处理。首先介绍几个要用到的数据结构。WAVEFORMATEX 结构定义了 WAVE 音频数据文件的格式。WAVEHDR 结构定义了波形音频缓冲区。读出的数据首先要填充此缓冲区才能送音频设备播放。WAVEOUTCAPS 结构描述了音频设备的性能。MMCKINFO 结构包含了 RIFF 文件中一个块的信息。详细的说明请参考 VC+中的帮助。下面给出程序流程简图及程序源代码清单,在 V

13、C+环境下可直接使用:源程序清单如下:LPSTR szFileName;/声音文件名MMCKINFO mmckinfoParent;MMCKINFO mmckinfoSubChunk;DWORD dwFmtSize;HMMIO m_hmmio;/音频文件句柄DWORD m_WaveLong;HPSTR lpData;/音频数据HANDLE m_hData;HANDLE m_hFormat;WAVEFORMATEX * lpFormat;DWORD m_dwDataOffset;DWORD m_dwDataSize;WAVEHDR pWaveOutHdr;WAVEOUTCAPS pwoc;HWA

14、VEOUT hWaveOut;/打开波形文件if(!(m_hmmio=mmioOpen(szFileName,NULL,MMIO_READ|MMIO_ALLOCBUF)/File open ErrorError(“Failed to open the file.“);/错误处理函数return false;/检查打开文件是否是声音文件mmckinfoParent.fccType =mmioFOURCC(W,A,V,E);if(mmioDescend(m_hmmio,(LPMMCKINFO)if(mmioDescend(m_hmmio,m_hFormat=LocalAlloc(LMEM_MOVE

15、ABLE,LOWORD(dwFmtSize);if(!m_hFormat)/failed alloc memorylpFormat=(WAVEFORMATEX*)LocalLock(m_hFormat);if(!lpFormat)/failed to lock the memoryif(unsigned long)mmioRead(m_hmmio,(HPSTR)lpFormat,dwFmtSize)!=dwFmtSize)/failed to read format chunk/离开 fmt 块mmioAscend(m_hmmio,/寻找 data 块mmckinfoSubChunk.ckid

16、=mmioFOURCC(d,a,t,a);if(mmioDescend(m_hmmio,m_dwDataOffset =mmckinfoSubChunk.dwDataOffset ;if(m_dwDataSize=0L)/no data in the data chunk/为音频数据分配内存lpData=new charm_dwDataSize;if(!lpData)/faileif(mmioSeek(m_hmmio,SoundOffset,SEEK_SET)0)/Failed to read the data chunkm_WaveLong=mmioRead(m_hmmio,lpData,S

17、oundLong);if(m_WaveLong0)/Failed to read the data chunk/检查音频设备,返回音频输出设备的性能if(waveOutGetDeVCaps(WAVE_MAPPER,pWaveOutHdr.dwBufferLength =m_WaveLong;pWaveOutHdr.dwFlags =0;if(waveOutPrepareHeader(hWaveOut,waveOutClose(hWaveOut);LocalUnlock(m_hFormat);LocalFree(m_hFormat);delete lpData; 说明:1)以上使用的音频设备和声

18、音文件操作函数的声明包含在 mmsystem.h 头文件中,因此在程序中必须用#include “mmsystem.h“语句加入头文件。同时在编译时要加入动态连接导入库 winmm.lib,具体实现方法是从Developer Studio 的 Project 菜单中选择 Settings,然后在 Link 选项卡上的 Object/Library Modules 控制中加入 winmm.lib。2)在 pWaveOutHdr.lpData 中指定不同的数据,可以播放音频数据文件中任意指定位置的声音。3) 以上程序均在 VC+6.0 中调试通过,在文中省略了对错误及异常情况的处理,在实际应用中必须加入。四结论在 VC+中可以根据应用需要采用不同的方法播放声音文件。简单应用可以直接调用声音播放函数。第二种方法可以把声音作为资源加入可执行文件中。如果在播放之前要对声音数据进行处理,可用第三种方法。参考书目:1. 美 Paul Perry 陈向群 等译多媒体开发指南 清华大学出版社2. 美 Peter Norton, Rob McGregor 孙凤英 等译MFC 开发 Windows95/NT4 应用程序 清华大学出版社 19983. 周敬利 多媒体声卡技术及应用 电子工业出版社 1998

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报