如何多次使用playound功能?

时间:2014-05-12 16:08:15

标签: c++ winapi playsound

如果我需要一声嘟嘟声,

PlaySound完全正常。以下说明了我的代码段:

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

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

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

以连续循环播放蜂鸣声。怎么玩这两次或三次等?

使用循环无济于事

2 个答案:

答案 0 :(得分:2)

该API有两种选择。可以播放同步或异步。

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

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

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

答案 1 :(得分:1)

问题是SND_ASYNC标志。它表示您希望此呼叫立即返回并在后台播放声音。

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

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