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

Jos*_*Kim 5 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)
Run Code Online (Sandbox Code Playgroud)

因此,现在如果按“ q”键,它会播放相应的声音。但是,如果我在当前声音播放完毕之前一直按“ q”键,它将在当前声音播放完毕后播放。按下“ q”按钮后,我将如何处理呢?它将停止当前的杂音并播放下一个?

Chr*_*nig 5

编辑: 进一步研究(Win7,Python3.6.1),Eswcvlads的答案是要走的路。使用该winsound.SND_ASYNC标志时,您可以立即播放另一种声音,并且当前正在播放的声音停止。

winsound.PlaySound(r'D:\seven_11.wav', winsound.SND_ASYNC)
Run Code Online (Sandbox Code Playgroud)

->玩seven_11

winsound.PlaySound(r'D:\seven_12.wav', winsound.SND_ASYNC)
Run Code Online (Sandbox Code Playgroud)

-> seven_11停止,seven_12开始播放

但是,要停止所有播放,我原来的方法仍然有效:

winsound.PlaySound(None, winsound.SND_PURGE)
Run Code Online (Sandbox Code Playgroud)

文档

winsound.PlaySound(sound, flags)...如果sound参数为None,则任何当前播放的波形声音都会停止。

因此,包括在调用PlaySound进行下一个播放之前,应在开始下一个播放之前停止播放。


Esw*_*lad 5

从文档来看,默认情况下,PlaySound 是同步的,因此只有在声音完全播放后才会返回。因此,脚本仅在声音结束时才处理下一个键。要使其异步,请使用winsound.SND_ASYNC如下标志:

winsound.PlaySound(sound_path, winsound.SND_FILENAME | winsound.SND_ASYNC)
Run Code Online (Sandbox Code Playgroud)


小智 5

if key == 113: #theq key
        winsound.Playsound(None, windsound.SND_FILENAME)
        winsound.PlaySound(sound_path, winsound.SND_FILENAME)
Run Code Online (Sandbox Code Playgroud)

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