c线程-为什么mmsystem(使用mciSendString)不播放声音文件
c threads - why does mmsystem (using mciSendString) not play the sound file?
我想让我的游戏玩一些sfx。一开始,我打开了一些mp3文件mciSendString("open Muzle.mp3 alias Muzle");
。
我的问题是mciSendString("play Muzle from 0");
仍然会造成一点滞后,游戏必须经常播放声音。
在另一个问题中,我读到使用线程可以解决问题。我对使用线程完全陌生。现在的问题是声音无法播放:p。我通过在最后给出一个cout来验证线程是否正常运行。
我现在有这个功能:
void Shout(string SoundName){
string FNstr;
wstring FNwstr;
FNstr = "play " + SoundName + " from 0";
FNwstr.assign(FNstr.begin(), FNstr.end());
mciSendString(FNwstr.c_str(), NULL, 0, NULL);
Sleep(2000);
cout << "Test woin";
}
(我也试过不睡觉。我想知道我是否需要它,因为如果线程到达末尾,它可能会被删除,声音会终止……我不确定线程或mmsystem是如何工作的)
如果我简单地调用这个Shout()
函数,它会播放声音,执行Sleep(2000),然后cout。一切都很好。但我必须使用线程,所以我尝试:
thread(Shout, "Muzle");
我得到错误:abort()已被调用。我发现我可能需要分离线程:
thread t(Shout, "Muzle");
t.detach();
这样,一切看起来都很好(2秒钟后,我看到控制台上打印着"测试woi"),但没有播放任何声音。
嗯,谢谢你阅读了所有的内容。你知道如何解决这个问题吗?
您可能应该有一个永久线程:1.等待声音结束后再继续(假设这是你想要的工作方式)。您可能只需要使用"等待"选项即可。2.当不播放声音时,等待命令播放下一个声音——使用管道向线程发送消息就是这样的解决方案之一,但您可以使用其他方法。
相关文章:
- 如何使用虚幻引擎"filter"多播?
- 无法在 Windows 10 上加入 IPV6 多播组
- 如何在 Linux 上的 C/C++ 中使用 ipv6 udp 套接字进行多播?
- IPv6 多播在局域网中不起作用
- 简单的多播应用程序无法在同一网络上的不同计算机上运行
- Linux VS Windows 上的 UDP 多播差异
- 如何从McIsendstring()中解决此错误并使其播放声音
- UDP 组播发送
- 提升 UDP 组播接收器: set_option:请求的地址在其上下文中无效
- 在覆盆子Pi路由器上进行多播
- C 在特定接口上接收多播
- 为什么Zeromq PGM多播未接收多播消息?(C ,Windows)
- Ubuntu C 多播双休假组消息
- 如何从已经订阅的组中接收多播数据包
- 我是否需要2个插座来进行多播和单播
- 在 LLVM 中,调用中函数的位播"type"是什么?如何访问此功能?
- 下播最佳实践(C++)
- 使用 Boost ASIO 在 macOS 上到特定接口的多播
- 如何正确接收多播UDP数据包
- C 如何加入多播MPEG流