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

时间:2017-05-03 11:02:10

标签: python windows python-3.x

所以我的代码看起来像这样:

    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'”后如何才能拥有它?按钮,它会停止当前的噪音并播放下一个吗?

3 个答案:

答案 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)