C ++控制台应用程序中的PlaySound?

aJy*_*nks 3 audio console

经过修改,使代码正确无误(感谢ta.speot.is)-底部的新问题

因此,我一直在该级别上使用控制台,并且被要求做第一个“项目”进行评估。我已经完成了基本的应用程序..但想让它变得更加扎实,并添加一些声音。从控制台播放的声音。

该测试有效..(kinda),因为它将播放声音文件..但是我有两个问题... 1当声音播放时,应用程序冻结,直到声音100%完成...还在尝试编译为一个“发布”错误,以及一个“链接错误”-致命错误LNK1120:1未解决的外部问题。

#include <iostream>
#include <windows.h>
#include <mmsystem.h>
using namespace std;

int main(){
    //PlaySound(TEXT("mywavsound.wav"), NULL, SND_FILENAME); - My erroring code
    PlaySound(TEXT("mywavsound.wav"), NULL, SND_FILENAME | SND_ASYNC);// - the correct code

    int test = 0;
    cin>>test;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是

  1. 我如何在不冻结控制台的情况下播放声音,所以例如可以在项目打开的整个过程中播放循环音乐文件。如果我还能在其上播放其他声音,那也很好。.例如,当您按Enter时,它会播放声音而不会停止音乐。
  2. 如何添加wav文件,以便将其作为发行版进行编译?

编辑

我知道SND_ASYNC的内容,但我不知道如何使用它,我无法在没有编译的情况下使用它。.是否有人有使用SND_ASYNC的代码示例?

编辑2

所以我现在正在工作...使用

"PlaySound(TEXT("mysound.wav"), NULL, SND_FILENAME | SND_ASYNC);"
Run Code Online (Sandbox Code Playgroud)

现在,我想知道如何一次播放1个或多个声音,因为如果我用该标志调用playsound两次,它将停止第一个声音并播放第二个声音。. 是否可以同时播放2个声音?

小智 6

使用 (mciSendstring) 函数代替 .. 使用它您可以播放 1 个以上的声音,并且您可以在彼此之上播放 2 个声音:)

例子:

mciSendString("play wave1.wav", NULL, 0, NULL);

mciSendString("play wave2.wav", NULL, 0, NULL);
Run Code Online (Sandbox Code Playgroud)

更深入的信息


ta.*_*.is 5

如何在不冻结控制台的情况下播放声音

如果您使用Google搜索,PlaySound 这是第一个结果

fdwSound

...

SND_ASYNC声音将异步播放,并PlaySound在开始播放声音后立即返回。要终止异步播放的波形声音,调用PlaySoundpszSound设置为NULL

您应该使自己熟悉搜索引擎及其功能。

如何添加wav文件,以便将其作为发行版进行编译?

您需要同时链接winmm.lib发布和调试配置。或者,添加

#pragma comment(lib, "winmm.lib")
Run Code Online (Sandbox Code Playgroud)

在您的源代码顶部。