C++控制台应用调用mciSendString播放MP3无声音如何解决
问题根因
- 你遇到的问题和音频设备配置、音量调整无关,代码本身的接口调用逻辑也没有错误。核心原因是
mciSendString的play命令默认是异步执行的:调用播放指令后函数会立刻返回,不会等待音频播放完成。你的main函数执行完播放相关代码后进程直接退出,系统会回收进程关联的所有音频播放资源,音频只来得及输出最开头的片段,也就是你听到的短暂爆音,之后就被强制中断了。
修复方案
方案1:使用wait参数阻塞播放
直接修改play指令,添加wait参数,该参数会让mciSendString函数阻塞到音频完整播放完成后再返回,修改后的对应代码如下:
mciGetErrorStringA( mciSendStringA("play click1 wait", nullptr, 0, nullptr), errorString.data(), MAXERRORLENGTH);
同时建议在程序退出前补充资源释放逻辑,避免资源泄漏:
// 播放完成后关闭打开的音频资源 mciSendStringA("close click1", nullptr, 0, nullptr);
方案2:自主控制进程等待时长
如果你需要异步播放逻辑,不想阻塞在play调用上,可以在main函数末尾添加对应时长的等待逻辑,比如你的音频时长为5秒,就添加如下代码:
// 单位为毫秒,根据你的音频实际时长调整 Sleep(5000); mciSendStringA("close click1", nullptr, 0, nullptr);
内容的提问来源于stack exchange,提问作者Eric Niebler
相关产品推荐
相关产品推荐

