PlaySound()mmslib不播放现有声音

时间:2011-07-26 00:21:20

标签: c++ windows

编辑:解决了。 Windows不接受.wav文件。我从中获取了一个Windows自己的文件,并将其重命名为我之前调用的文件,并且播放没有问题。

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

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

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中播放正常。

2 个答案:

答案 0 :(得分:1)

以下代码完美有效:

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

添加SND_ASYNC无法播放。

答案 1 :(得分:0)

The documentation说:

  

pszSound参数是文件名。如果找不到该文件,   除非SND_NODEFAULT标志是,否则该函数将播放默认声音   集。

  

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

没有为此结果指定其他案例。

因此,您听到一个响铃声表示该文件未找到,尽管您保证相反。

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