You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C++中使用PlaySound()播放资源中的音频?

解决PlaySound调用嵌入资源音频失败的问题

问题说明

运行控制台exe后未播放目标音频,反而循环播放Windows通知音效,核心原因是你把音频作为资源嵌入程序,但调用PlaySound时错误使用了文件读取模式,导致函数找不到对应磁盘文件,触发系统默认提示音。

代码修改方案

1. 修正PlaySound调用逻辑

你在.rc文件里定义的资源名为song,要调用嵌入的资源,需要切换到资源读取模式,修改play()函数如下:

void play() {
  // GetModuleHandle(NULL)获取当前程序的模块句柄,用于定位嵌入的资源
  PlaySound(TEXT("song"), GetModuleHandle(NULL), SND_RESOURCE | SND_LOOP | SND_ASYNC);
}
  • 第一个参数改为.rc中定义的资源名song,而非文件名a18.wav
  • 第二个参数传入当前程序的模块句柄,让函数明确从当前exe的资源中查找
  • 标志位替换为SND_RESOURCE,同时保留你需要的SND_LOOP和SND_ASYNC

2. 确认资源文件编译关联

在CodeBlocks中,确保song.rc已添加到项目:右键项目→Add files,选择song.rc加入,这样编译时资源编译器会把它处理成.res文件并链接到最终的exe中。

额外说明

如果不想嵌入资源,而是读取外部音频文件,需要保证a18.wav和exe在同一目录,或者传入完整路径(比如TEXT("./rsrc/a18.wav")),但这种方式需要将音频文件和exe一起分发。

内容的提问来源于stack exchange,提问作者Ключник

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 13:55:20