visual studion 2022如何使用PlaySound()

书籍:《windows程序设计(第五版)》的开始

环境:visual studio 2022

内容:HELLOWIN程序

说明:以下内容大部分来自腾讯元宝。

在Visual Studio 2022中使用PlaySound()函数播放音频,需完成以下步骤:


​1. 配置项目环境

​**(1) 添加头文件和库文件**
  • 头文件 :在代码中包含<mmsystem.h>,注意需在<windows.h>之后引入。
  • 库文件 :需链接winmm.lib库。可通过以下两种方式实现:
    • 方法1 :在代码中添加#pragma comment(lib, "winmm.lib")。
    • 方法2 :在项目属性中配置:
      • 右键项目 → 属性 → 链接器 → 输入 → 附加依赖项 → 添加winmm.lib。
​**(2) 字符串类型适配**
  • 若项目使用Unicode字符集(默认设置),需将字符串参数转换为宽字符类型:

    cpp 复制代码
    PlaySound(TEXT("sound.wav"), NULL, SND_FILENAME | SND_ASYNC); // 使用TEXT宏自动转换[1](@ref)

​2. 调用PlaySound()函数

​**(1) 播放本地WAVE文件**
cpp 复制代码
PlaySound(TEXT("TESTWAVE.wav"), NULL, SND_FILENAME | SND_ASYNC); // 同步/异步播放[1,4](@ref)
  • 参数说明 :
    • TEXT("TESTWAVE.wav"):音频文件路径(需双反斜杠转义,如C:\\music\\sound.wav)。
    • NULL:使用当前实例句柄。
    • SND_FILENAME | SND_ASYNC:指定文件路径并异步播放(播放后函数立即返回)。
​**(2) 播放资源文件**
  1. 在资源视图中右键项目 → 添加 → 资源 → 导入WAVE文件,假设资源ID为IDR_SOUND:

    cpp 复制代码
    PlaySound(MAKEINTRESOURCE(IDR_SOUND), GetModuleHandle(NULL), SND_RESOURCE | SND_ASYNC); // 从资源播放[1,4](@ref)
  • 注意 :MAKEINTRESOURCE用于将资源ID转换为指针类型。
​**(3) 播放系统声音**
cpp 复制代码
PlaySound(TEXT("SystemStart"), NULL, SND_ALIAS | SND_ASYNC); // 播放系统启动音效[1,4](@ref)
  • SystemStart是Windows预定义的系统事件别名。

​3. 常见标志组合

标志 作用 示例场景
SND_ASYNC 异步播放(函数立即返回) 背景音乐播放
SND_LOOP 循环播放 游戏背景音乐
SND_NODEFAULT 不播放默认声音(若文件不存在) 避免错误提示音
SND_MEMORY 播放内存中的音频数据 加载到内存的音频缓冲区

​4. 错误处理

cpp 复制代码
if (!PlaySound(TEXT("nonexistent.wav"), NULL, SND_FILENAME)) {
    // 处理错误(如文件不存在)
    MessageBox(NULL, TEXT("音频文件加载失败!"), TEXT("错误"), MB_ICONERROR);
}

​5. 注意事项

  1. 路径格式 :Windows路径需使用双反斜杠(\\)或TEXT()宏处理。
  2. 异步播放 :若需同步播放(函数等待音频结束),移除SND_ASYNC标志。
  3. 资源释放 :若通过SND_MEMORY加载音频,需手动释放内存。

通过以上步骤,即可在Visual Studio 2022中实现音频播放功能。具体实现可根据需求选择文件路径、资源或系统声音。

相关推荐
小七在进步20 小时前
string的使用(1)
c++·visual studio
Hhy_11075 天前
《C++深度解构06》手撕 string —— 从底层内存管理到深浅拷贝彻底吃透
c语言·开发语言·c++·学习·visual studio
H.莓飛6 天前
【C++】【STL】vector_OJ题
linux·服务器·开发语言·数据结构·c++·visual studio
Rabitebla8 天前
【Linux 底层原理】进程(十):进程等待详解---从僵尸进程到 wait、waitpid 与 status
linux·c++·笔记·学习·visual studio
咸咸咸虾14 天前
Microsoft Visual Studio 历史版本与官方安装包链接汇总
ide·microsoft·visual studio
胖纸不争14 天前
EnergyStarZ:让 Windows 后台进程给前台让路的能效管理器(v1.2 发布)
windows·性能优化·c#·win32·ef core
zuiyuewentian14 天前
借助 AI 在 Win11 上搭建 Rocky Linux:用 Visual Studio 直接调试 Linux 服务
linux·运维·visual studio
C++ 老炮儿的技术栈14 天前
Linux 动态库踩坑:明明重新编译了 .so,调用函数返回值却一直不变(libfjrobot.so 版本号异常排查实录)
linux·c语言·网络·c++·visual studio
H.莓飛15 天前
【数据结构】排序总结与规模实测
linux·服务器·开发语言·数据结构·visual studio·1024程序员节
夏虫不可与之言冰16 天前
RMT 与 WS2812 灯带:可寻址 RGB 全彩控制
c语言·c++·单片机·物联网·visual studio