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

C++中调用PlaySound()始终播放Windows错误音效问题求助

解决PlaySound()播放默认错误音效的问题

我之前也踩过这个坑!当PlaySound()总是播放Windows默认错误音效时,基本都是它找不到有效音频文件或者参数/环境配置出了问题,咱们一步步排查:

1. 确认路径的准确性(避免转义陷阱)

你用双反斜杠转义是对的,但C++14支持原始字符串字面量,可以彻底避免转义错误,试试把路径改成这样:

PlaySound(TEXT(R"(D:\Pokemon Game Stuff\Programming\Tests\city simulator\Sound.wav)"), NULL, SND_FILENAME | SND_ASYNC);

另外手动核对路径:打开资源管理器粘贴路径,确保Sound.wav确实存在,文件名没有拼写错误(比如大小写,Windows一般不区分,但个别场景会有意外)。

2. 检查WAV文件的兼容性

PlaySound()只支持PCM编码的WAV文件,不支持压缩格式(比如MP3转的WAV如果是压缩编码也不行)。你可以:

  • 用Windows自带的录音机录一个简单的测试WAV,替换原文件试试
  • 用Audacity把现有文件转成PCM编码:导入文件后,选择文件->导出->导出为WAV,在编码选项里选无压缩(PCM)

3. 验证文件权限与目录访问

如果你的音频文件放在受系统保护的目录(比如Program Files),普通权限的程序可能无法读取。试试:

  • 把Sound.wav移到项目根目录,用相对路径调用(比如TEXT("Sound.wav"))
  • 右键以管理员身份运行Code::Blocks,再编译运行程序

4. 加上错误检查精准定位问题

调用PlaySound()后用GetLastError()获取错误码,能直接告诉你问题所在,比如:

  • ERROR_FILE_NOT_FOUND:文件找不到
  • ERROR_BAD_FORMAT:音频格式不支持

测试代码示例:

#include <windows.h>
#include <iostream>

int main() {
    BOOL playResult = PlaySound(TEXT("D:\\Pokemon Game Stuff\\Programming\\Tests\\city simulator\\Sound.wav"), NULL, SND_FILENAME | SND_ASYNC);
    if (!playResult) {
        DWORD errorCode = GetLastError();
        std::cout << "PlaySound调用失败,错误码:" << errorCode << std::endl;
    }
    // 防止程序立即退出,听不到音效
    Sleep(3000);
    return 0;
}

5. 确认Code::Blocks的链接器配置

虽然你说加了winmm.lib,但MinGW编译器(Code::Blocks默认用这个)需要用-lwinmm作为链接选项,而不是直接写winmm.lib。检查步骤:

  1. 打开项目属性(右键项目 -> Build options)
  2. 切换到Linker settings标签
  3. 在Other linker options里添加-lwinmm

如果以上步骤都试过还是不行,把GetLastError()返回的错误码贴出来,就能更精准地解决问题啦!

内容的提问来源于stack exchange,提问作者Lumiobyte

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:13:33