所以我有这样的代码:
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”button后,我怎么会这样做,它会阻止当前的噪音,并播放下一个噪音?
编辑:进一步研究(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)
– > 7_11停止,7_12开始播放
但是,要停止所有播放,我的原始方法仍然有效:
winsound.PlaySound(None, winsound.SND_PURGE)
从文档 :
winsound.PlaySound(sound, flags)
…如果声音参数为None
,则当前正在播放的任何波形声音都将停止。
因此,在为下一个PlaySound调用PlaySound之前,应该在开始下一个之前停止播放。
通过文档判断,默认情况下,PlaySound是同步的,只有在声音播放完毕后才会返回。 所以脚本只有在声音结束时才处理下一个键。 要使其异步使用winsound.SND_ASYNC
标志,如下所示:
winsound.PlaySound(sound_path, winsound.SND_FILENAME | winsound.SND_ASYNC)
if key == 113: #theq key winsound.Playsound(None, windsound.SND_FILENAME) winsound.PlaySound(sound_path, winsound.SND_FILENAME)
如果声音参数为“无”,则任何当前正在播放的波形声音都将停止。 所以在每个声音文件播放前都要这样做。