所以我的代码看起来像这样:
import winsound
from msvcrt import getch
sound_path = "Path to sound"
while True:
key= ord(getch())
if key == 27:
break
if key == 113: #theq key
winsound.PlaySound(sound_path, winsound.SND_FILENAME)
现在,如果我按下' q'键,它会播放相应的声音。但是,如果我继续按下' q'当前声音完成播放前的键,它将在当前声音结束后播放。按下“q'”后如何才能拥有它?按钮,它会停止当前的噪音并播放下一个吗?
答案 0 :(得分:4)
修改强>
进一步研究它(Win7,Python3.6.1), Eswcvlads 回答是要走的路。使用winsound.SND_ASYNC
标志时,您可以立即播放另一种声音,并且当前正在播放的声音停止。
winsound.PlaySound(r'D:\seven_11.wav', winsound.SND_ASYNC)
- >播放seven_11
winsound.PlaySound(r'D:\seven_12.wav', winsound.SND_ASYNC)
- > seven_11 stop和seven_12开始播放
但是,要停止所有播放,我的原始方法仍然有效:
winsound.PlaySound(None, winsound.SND_PURGE)
来自docs:
winsound.PlaySound(sound, flags)
...如果声音参数为None
,则任何当前播放的波形声音都会停止。
因此,在为下一个调用PlaySound之前包含该内容应该在开始播放之前停止播放。
答案 1 :(得分:4)
if key == 113: #theq key
winsound.Playsound(None, windsound.SND_FILENAME)
winsound.PlaySound(sound_path, winsound.SND_FILENAME)
如果声音参数为None,则停止当前播放的任何波形声音。所以在每个声音文件播放之前都这样做。
答案 2 :(得分:2)
根据this link to understand sqlite判断,默认情况下,PlaySound是同步的,因此只有在声音完全播放后才会返回。因此脚本仅在声音结束时才处理下一个键。要使其异步,请使用winsound.SND_ASYNC
标记,如下所示:
winsound.PlaySound(sound_path, winsound.SND_FILENAME | winsound.SND_ASYNC)