如何在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,提问作者Ключник
相关产品推荐
相关产品推荐

