4

PlaySound如果我需要一声哔哔声,效果很好。下面说明了我的代码片段:

PlaySound(TEXT("C:\\Test1.wav"), NULL, SND_ASYNC);

我的问题是,如何使用此功能两次或两次以上,因为无论我放在一起的重复次数如何,它都只播放一次。我也试过这个:

PlaySound(TEXT("C:\\Test1.wav"), NULL,SND_FILENAME|SND_LOOP|SND_ASYNC);

它以连续循环播放哔哔声。怎么玩这个两次或三次等?

使用循环也无济于事

4

2 回答 2

2

该 API 有两个选项。要么同步播放,要么异步播放。

如果您同步播放,那么您的线程将阻塞,直到声音播放完毕。您可以将它放入一个循环中并根据需要多次调用它,但是在播放声音时您的线程将阻塞。

如果您异步播放,那么您的线程不会阻塞,但您没有任何可靠的方法来控制重复次数。

我为您看到了两种解决方案:要么从原始声音中创建一个新声音,添加正确的重复次数并播放一次,要么创建一个后台线程来播放指定次数的声音 - 在这个后台线程中,您可以安全地使用如上所述的同步播放方法。

于 2014-05-12T16:22:09.860 回答
1

问题是SND_ASYNC国旗。它表示您希望此调用立即返回并在后台播放声音。

如果您在循环中执行此操作,由于它会在声音仍在播放的情况下返回,它将与下一次调用重叠并且什么都不做,因为 IIRC,应用程序只能同时对 PlaySound 进行一次调用。

解决方案是替换SND_ASYNCSND_SYNC(或删除它,因为它是默认设置)。如果您需要异步调用,您可以创建一个线程并将您想要播放的声音排入队列。该线程将同步播放,但您的其他线程不会注意到。

于 2014-05-12T16:20:06.983 回答