如果在程序运行的任何时候按Enter键,如何停止音乐?

时间:2017-07-15 01:52:40

标签: python windows python-2.7 audio winsound

我希望我的程序按照以下方式执行:

此程序正在运行时:
如果按下public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { writer.WriteStartArray(); var points = (List<Point>)value; if (points.Any()) { var converter = new PointConverter(); foreach (var point in points) { converter.WriteJson(writer, point.Coordinates, serializer); } } writer.WriteEndArray(); } 键,则停止播放当前音乐文件。

这是我的代码:

Enter

在文档中(请参阅我的代码第一行中的链接),我不确定天气# https://docs.python.org/2/library/winsound.html from msvcrt import getch import winsound while True: key = ord(getch()) if key == 13: winsound.PlaySound(None, winsound.SND_NOWAIT) winsound.PlaySound("SystemAsterisk", winsound.SND_ALIAS) winsound.PlaySound("SystemExclamation", winsound.SND_ALIAS) winsound.PlaySound("SystemExit", winsound.SND_ALIAS) winsound.PlaySound("SystemHand", winsound.SND_ALIAS) winsound.PlaySound("SystemQuestion", winsound.SND_ALIAS) winsound.MessageBeep() winsound.PlaySound('C:/Users/Admin/My Documents/tone.wav', winsound.SND_FILENAME) winsound.PlaySound("SystemAsterisk", winsound.SND_ALIAS) 可以像这样使用:winsound.SND_NOWAIT,或者就像我在代码中尝试使用它一样在winsound.SND_NOWAIT()声明下,或两个声明都产生相同的效果。

我的理解是,在我按下if按钮之前,程序永远不会播放声音文件,因为Enter部分需要才能继续播放。< / p>

但是,即使代码的那部分不关心 时我按了什么,程序也不会卡在getch()循环中?

1 个答案:

答案 0 :(得分:0)

winsound.SND_NOWAIT的链接文档指出:

  

注意:现代Windows平台不支持此标志。

除此之外,我不认为你理解getch()是如何运作的。这是其文档的链接:

https://msdn.microsoft.com/en-us/library/078sfkak

以下是另一个名为kbhit()的相关内容(msvcrt也包含,我在下面使用):

https://msdn.microsoft.com/en-us/library/58w7c94c.aspx

当按下 Enter 键时,以下将停止循环(和程序,因为这是其中唯一的东西)。请注意,它不会中断任何已播放的单个声音,因为winsound没有提供这样做的方法,但它会阻止任何其他声音播放。

from msvcrt import getch, kbhit
import winsound

class StopPlaying(Exception): pass # custom exception

def check_keyboard():
    while kbhit():
        ch = getch()
        if ch in '\x00\xe0':  # arrow or function key prefix?
            ch = getch()  # second call returns the actual key code
        if ord(ch) == 13:  # <Enter> key?
            raise StopPlaying

def play_sound(name, flags=winsound.SND_ALIAS):
    winsound.PlaySound(name, flags)
    check_keyboard()

try:
    while True:
        play_sound("SystemAsterisk")
        play_sound("SystemExclamation")
        play_sound("SystemExit")
        play_sound("SystemHand")
        play_sound("SystemQuestion")

        winsound.MessageBeep()

        play_sound('C:/Users/Admin/My Documents/tone.wav', winsound.SND_FILENAME)

        play_sound("SystemAsterisk")

except StopPlaying:
    print('Enter key pressed')