PlaySound() mmslib不播放现有的声音
PlaySound() mmslib does not play existing sound
编辑:已解决。只是。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函数之后,你会发现它工作得很好。
相关文章:
- 如何收听Windows当前正在播放的声音?
- 如何在C++中播放声音?
- 有没有办法毫不拖延地播放声音?
- 在不打开应用程序的情况下在MinGW c++中播放声音(.wav)文件
- 如何在QT中飞溅之前播放声音?
- 计时器达到零时如何播放声音?
- 如何在主游戏循环中使用 sfml 只播放一次声音
- 每次播放前都会出现超强的 SDK 声音故障
- 使用MinGW播放声音
- 如何从McIsendstring()中解决此错误并使其播放声音
- 如何强制停止声音/ bgm正在通过PlaySound方法播放
- 如何在 XAudio2 上同时播放多个声音
- 如何在 c++ 中播放声音
- 视觉 在C++中正确使用播放声音功能
- 如何使用Media Foundation同时播放两个声音
- Portaudio:通过调用功能播放多个生成的声音
- 切换音频设备时播放声音的SDL问题
- XAudio2 延迟声音 - 播放多个声音时
- 采样率偏差和声音播放位置
- 如何通知我的应用程序默认声音播放设备已更改