0

我在使用 winsound 和 tq​​dm 时遇到了一些问题。我正在制作一个地下控制系统,使用进度条显示两个车站之间的距离,winsound 播放车站的名称。进度条出现,但没有声音。

from tqdm import tqdm
import time
import winsound

for i in tqdm(range(100)):
    time.sleep(0.02)

winsound.PlaySound("Nastepna.wav", winsound.SND_ASYNC)

但是,当我这样做时:

from tqdm import tqdm
import time
import winsound

winsound.PlaySound("Nastepna.wav", winsound.SND_ASYNC)

for i in tqdm(range(100)):
    time.sleep(0.02)

声音播放没有问题。

4

1 回答 1

0

winsound 文档SND_ASYNC

winsound.SND_ASYNC
    立即返回,允许声音异步播放。

所以SND_ASYNC标志使调用PlaySound异步。也就是说,它不会等待声音完成才返回。当您首先拨打电话然后有效地休眠 2 秒以显示进度条时,这可以正常工作,因为在程序继续执行时声音有时间播放。

但是当你在程序的工作完成后以这种方式播放声音时,该PlaySound函数立即返回,然后程序无事可做,因此退出,没有时间播放声音。

您可以通过将winsound.SND_FILENAME标志传递给来更改此行为PlaySound,这将使调用同步,等待声音在返回之前完成播放:

from tqdm import tqdm
import time
import winsound

for i in tqdm(range(100)):
    time.sleep(0.02)

winsound.PlaySound("Nastepna.wav", winsound.SND_FILENAME)
于 2018-12-07T16:49:16.997 回答