使PlaySound无阻塞

时间:2017-01-02 04:22:55

标签: c++ windows audio

我一直在测试声音,我注意到PlaySound正在阻挡,即它等待声音播放完毕才会返回。

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

int main()
{
    PlaySound("E:/Downloads/eb_sfx_archive/brainshock.wav", 0, SND_FILENAME);
    std::cout << "this sound is cool";
    Sleep (500);
    std::cout << "\nmeh... not really";
    return 0;
}

此代码播放声音,但它等待输出&#34;此声音很酷&#34;直到声音播放完毕。我怎么能不这样做?

2 个答案:

答案 0 :(得分:4)

异步播放声音:

PlaySound(L"E:\\Downloads\\eb_sfx_archive\\brainshock.wav", NULL, SND_ASYNC);

来自MSDN文档:

  

声音以异步方式播放,PlaySound在开始播放后立即返回。要终止异步播放的波形声音,请在PlaySound设为pszSound时致电NULL

答案 1 :(得分:3)

使用标记SND_ASYNC异步播放声音。

I.e:

PlaySound("E:/Downloads/eb_sfx_archive/brainshock.wav", 0, SND_FILENAME | SND_ASYNC);

SND_ASYNC标志会导致PlaySound立即返回而不等待声音完成播放。

此外,如果您需要停止播放声音(循环或异步)而不播放其他声音,请使用以下声明:

PlaySound(NULL, NULL, 0);

更多信息和示例here(使用PlaySound循环声音)和here(PlaySound功能)。