`
zhuyifeng
  • 浏览: 44934 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

PlaySound和sndPlaySound的三种播放音乐方法

 
阅读更多

首先要添加头文件

#include "mmsystem.h"//导入声音头文件 #pragma comment(lib,"winmm.lib")//导入声音头文件库

 

1. 通过filename来定位文件播放

PlaySound(TEXT("c:\\crossing field.wav"), NULL, SND_FILENAME | SND_ASYNC); // TEXT()函数处理宽字符问题,SND_FILENAME标识采用文件名播放,SND_ASYNC标识异步播放,即PlaySound函数开始播放后便返回执行代码而不是等到播放完了再执行(此种方式对应SND_SYNC) 
sndPlaySound(TEXT("c:\\crossing field.wav"), SND_FILENAME | SND_ASYNC);

这种方式依赖于外部文件,若文件位置改变,则无法正常播放,所以有接下来两种方法。 

 

 

 

2. 通过资源文件播放

首先将wav文件添加进资源.rc文件,假设文件ID为IDR_WAVE1,则代码如下

PlaySound((LPCTSTR)IDR_WAVE1, NULL, SND_RESOURCE | SND_ASYNC | SND_LOOP); // 将文件ID强制转换为LPCTSTR型数据,然后标明是采用资源文件的形式播放(SND_RESOURCE),异步(SND_ASYNC),循环(SND_LOOP)

 

sndPlaySound((LPCTSTR)IDR_WAVE1, SND_RESOURCE | SND_ASYNC | SND_LOOP); // 同PlaySound

  

 

 

 

 

3. 通过加载进内存播放

首先找到资源文件

 

HRSRC hrsrc = FindResource(NULL, (LPCTSTR)IDR_WAVE1, TEXT("WAVE")); // IDR_WAVE1为文件ID,WAVE为文件ID所在文件夹名称

若成功则返回资源文件句柄,将其赋给hrsrc,失败返回NULL

接着加载资源文件

 

HGLOBAL hglobal = LoadResource(NULL, hrsrc); // 将第一步成功的句柄传给LoadResource作为参数,并得到HGLOBAL的实例hglobal 

同样失败返回NULL

最后锁定资源同时得到该资源在内存中的首地址

LPCWSTR pBuffer = (LPCWSTR)LockResource(hglobal); // LockResource返回LPVOID型指针,强制转换为LPCWSTR型

拿到pBuffer后就可以调用PlaySound和sndPlaySound函数了

PlaySound(pBuffer, NULL, SND_MEMORY | SND_ASYNC | SND_LOOP); // SND_MEMORY表明播放内存中的声音数据
sndPlaySound(pBuffer, SND_MEMORY | SND_ASYNC | SND_LOOP);

 

 

 

第一种方式是外部调用,所以生成的exe文件很小,而第二种第三种会把wav文件压进exe文件,所以文件会变得特别大……

分享到:
评论

相关推荐

    DelphisndPlaySound_delphi_delphisndplaysound_

    在Delphi编程环境中,开发...总的来说,Delphi中使用`sndPlaySound`函数播放音频是一种简洁的方法,适合快速实现基础的音频播放功能。但若需要更复杂的功能,如音效处理、多音频流控制等,应考虑使用专门的音频处理库。

    VC 使用PlaySound播放WAV文件.rar

    通过使用PlaySound函数,开发者不仅可以播放本地的WAV文件,还可以灵活地控制声音的播放方式,比如在游戏开发中实现背景音乐的播放、暂停、停止等功能。此外,配合其他多媒体API,如MMSystem库或DirectX,可以实现更...

    Delphi 播放音乐几种方式。各自优缺点

    传统的基本可以实现所有的播放音乐功能,但是易出错, 声卡异常,报错。 SndPlaySound 用于简单播放提示音可以使用,简洁,快速,windows 也是调用这个 播放的 MCISendString 功能最强,最全。即使声卡异常也不会...

    vc MFC编程如何添加背景音乐

    这里的关键在于`PlaySound`函数的第三个参数,`SND_ASYNC`表示异步播放,即播放音乐的同时不会阻塞程序的其他操作;`SND_ALIAS`则是用于指定声音别名,但在直接使用文件路径时通常不需要。 #### 方法二:使用多线程...

    MFC程序加音乐

    PlaySound 函数是 Windows 提供的一种播放声音的函数,函数声明为: `BOOL PlaySound(LPCSTR pszSound, HMODULE hmod, DWORD fdwSound);` 参数 `pszSound` 是指定要播放声音的字符串,该参数可以是 WAVE 文件的...

    mfc背景音乐与图片的实现.pdf

    方法一:使用 sndPlaySound 函数或 PlaySound 函数播放 wav 文件 sndPlaySound 函数的原型是 BOOL sndPlaySound(LPCSTR lpszSound, UINT fuSound); 或 BOOL PlaySound(LPCSTR lpszSound, HMODULE hmod, DWORD ...

    mfc背景音乐与图片的实现.docx

    对于背景音乐的实现,VC++的多媒体库提供了一些核心函数,例如`sndPlaySound`和`PlaySound`。这两个函数都能用来播放.WAV音频文件,这是Windows系统最基础的音频格式。下面分别介绍它们的用法: 1. `sndPlaySound`...

    基于C#用winmm.dll和电脑声卡录音

    winmm.dll是Windows操作系统提供的一组多媒体API,它包含了一系列与音频处理相关的函数,如waveOutGetNumDevs、PlaySound、mciSendString和sndPlaySound等。 首先,`waveOutGetNumDevs`函数用于获取系统中的音频...

    2022年市场-多媒体应用程序设计(1).pptx

    MessageBeep()函数用于播放系统内置的提示音,而sndPlaySound()和PlaySound()则可以播放.wav格式的声音文件。例如,通过在 OnInitDialog() 函数中调用sndPlaySound(),我们可以使程序启动时播放特定的音频,如...

    多媒体应用程序的设计.pptx

    - **例12-1**:创建一个简单的音频播放程序,通过在主程序中加入必要的音频函数调用来实现启动时播放音乐。 - **例12-2**:设计一个更复杂的音频播放器,包括选择文件、播放、暂停、继续播放和停止播放等功能。这...

    Vc++期末课程设计

    `PlaySound()`函数接受三个参数,分别指定声音来源、模块句柄和播放标志,可以播放文件、资源或内存中的声音,还能控制声音的播放方式。而`sndPlaySound()`函数与`PlaySound()`功能相似,但在使用上略有区别。 在...

    10多媒体应用程序设计.pptx

    2. `PlaySound()`函数:比`sndPlaySound()`更强大,它可以播放来自资源或文件的声音,支持更多选项,如循环播放和同步播放。 在更复杂的多媒体控制中,常常使用MCI( Multimedia Control Interface)接口。MCI允许...

    多媒体应用程序设计(OK).pptx

    在`OnInitDialog()`函数中,我们调用`sndPlaySound()`来播放音乐。 进入【例】11.2,我们学习如何使用MCI(Media Control Interface)控制波形声音的播放。MCI是一个低级别的接口,用于操作各种多媒体设备。`...

    2022年市场-多媒体应用程序设计.pptx

    3. **PlaySound()** 函数:相较于`sndPlaySound()`,`PlaySound()`功能更加强大,它不仅能播放.wav文件,还能播放来自程序资源的声音。同时,它提供了更多的控制选项,如循环播放等。 进一步深入多媒体应用程序设计...

Global site tag (gtag.js) - Google Analytics