如何停止在Python中播放的声音?

所以我有这样的代码:

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) 

如果声音参数为“无”,则任何当前正在播放的波形声音都将停止。 所以在每个声音文件播放前都要这样做。