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

PlaySound() mmslib does not play existing sound

本文关键字:声音 播放 mmslib PlaySound      更新时间:2023-10-16

编辑:已解决。只是。wav文件不被Windows接受。我选择了一个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¨

下面的代码可以很好地工作:

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;

PlaySound(L"C:WindowsMediaCityscapeWindows Balloon.wav", 0, SND_FILENAME);添加SND_ASYNC失败。这个答案是正确的!这是因为ASYNC模式在函数返回后播放音乐。您的代码可能在音乐播放之前就退出了。使用int x, cin>>x,在PlaySound函数之后,你会发现它工作得很好。