PlaySound()mmslib不播放现有的声音

编辑:解决。 只有.wav文件没有被Windows接受。 我采取了Windows自己的文件之一,并重命名为我以前的文件被称为和它没有问题。

我不知道为什么这不能播放现有的文件。 Windows给出了一个钟声,有些事情是错误的,但我不知道是什么。

我之前添加了一个支票,以确保它存在。 我也尝试过绝对path。

string wavPath = "c:\\frog.wav"; struct stat stFileInfo; bool blnReturn = (stat(wavPath.c_str(), &stFileInfo) == 0); //this returns true FILE* fp = fopen(wavPath.c_str(), "r"); if (fp) { fclose(fp); //this triggers } PlaySound(wavPath.c_str(), NULL, SND_FILENAME | SND_ASYNC); //m_hinstance //C:\\Users\\Wollan\\My Code\\A\\Debug\\frog.wav //TEXT("frog.wav") //TEXT(wavPath.c_str()) //(LPCSTR)"frog.wav¨ 

该文件在WMP中播放良好。

以下代码完美工作:

 PlaySound(L"C:\\Windows\\Media\\Cityscape\\Windows Balloon.wav", 0, SND_FILENAME ); 

添加SND_ASYNC无法播放。

该文件说:

pszSound参数是一个文件名。 如果找不到文件,除非设置了SND_NODEFAULT标志,否则该功能将播放默认声音。

和:

PlaySound在以下目录中搜索声音文件:当前目录; Windows目录; Windows系统目录; 在PATH环境变量中列出的目录; 和在网络中映射的目录列表。 如果函数找不到指定的声音并且未指定SND_NODEFAULT标志,则PlaySound将使用默认的系统事件声音。

没有其他情况下指定为这个结果。

因此,即使您有相反的保证,您听到钟声表示文件没有被找到。

我会仔细检查stat调用的结果; 我甚至无法在文档中找到stat信息; 它似乎不是Windows的一部分。

PlaySound(L“C:\ Windows \ Media \ Cityscape \ Windows Balloon.wav”,0,SND_FILENAME); 添加SND_ASYNC无法播放。 这个答案是对的! 这是因为ASYNC模式在函数返回后播放音乐。 音乐播放之前,您的代码可能已经退出。 使用int x,cin >> x,在PlaySound函数之后,您会发现它运行良好。