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

C++控制台程序添加持续循环背景音乐问题:声音仅播放一次

解决C++控制台程序背景音乐无法循环播放的问题

你的代码无法循环播放的核心问题是PlaySoundA的参数组合不正确,以下是修正方案和解释:

修正后的代码

#include <Windows.h>
#include <thread>
#include <iostream>

void play_music() {
    // 组合正确的标志实现循环异步播放
    PlaySoundA("sound.wav", NULL, SND_FILENAME | SND_LOOP | SND_ASYNC | SND_NODEFAULT);
    // 保持线程存活(可选,防止音频意外终止)
    std::cin.get();
    // 程序退出前停止音频(可选,释放资源)
    PlaySoundA(NULL, NULL, 0);
}

int main(){
    std::thread t(play_music); 
    // 这里放置你的业务代码
    std::cout << "程序运行中,按回车键退出..." << std::endl;
    t.join();
    return 0;
}

关键参数说明

  • SND_ASYNC:必须和SND_LOOP搭配使用。没有这个标志时,PlaySoundA会阻塞线程直到音频播放完毕,无法触发循环逻辑;加上后函数会立即返回,让系统在后台持续循环播放音频。
  • SND_NODEFAULT:当找不到指定的sound.wav文件时,不会播放系统默认提示音,避免不必要的干扰。
  • SND_LOOP:负责开启循环播放逻辑,但必须依赖SND_ASYNC才能生效。

额外注意事项

  • 确保sound.wav文件和程序可执行文件在同一目录,或者使用完整绝对路径指定文件位置。
  • 如果你的业务代码会长期运行,线程里的std::cin.get()可以替换为其他保持线程存活的逻辑(比如监听程序退出信号)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:46:01