有没有一种可以立即播放声音的方法?

时间:2019-12-01 18:21:04

标签: c++ windows winapi

我的程序正在播放声音PlaySound

程序运行正常,我可以听到声音,但是当歌曲结束时,会有大约1秒钟的延迟,然后歌曲再次播放。

我问Google,他给了我一个问题-PlaySound() Delay

回答的人说,SND_SYNC我们需要使用SND_ASYNC,我听了他的话,但听不到。

您有什么建议吗?

顺便说一句,这是我目前正在为此项目使用的歌曲-Nyan Cat

我希望这首歌能立即重新播放,以使用户听不到延迟。

最终密码:

#include <iostream>
#include <Windows.h>
#include <string>
#pragma comment(lib, "winmm.lib")

int main()
{
    std::string pathtosound = "C:\\Users\\roile\\Documents\\Dragonite\\nyan.wav";
    while (true) {
        PlaySound(pathtosound.c_str(), 0, SND_SYNC);
    }

    return 0;
}

1 个答案:

答案 0 :(得分:1)

Microsoft Docs中对SND_LOOP标志的描述如下:

  

声音会反复播放,直到再次按下 PlaySound    pszSound 参数设置为 NULL 。如果设置了此标志,则还必须设置    SND_ASYNC 标志。

请注意最后一句话,因此以下代码可能会更好地工作:

#include <iostream>
#include <Windows.h>
#include <string>
#pragma comment(lib, "winmm.lib")

int main()
{
    std::string pathtosound = "C:\\Users\\roile\\Documents\\Dragonite\\nyan.wav";
    PlaySound(pathtosound.c_str(), 0, SND_ASYNC | SND_LOOP);
    while (true) {
        // Stop loop at some point
    }
    PlaySound(NULL, 0, 0);  // Stop sample

    return 0;
}