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



我希望我的程序执行以下操作:

此程序运行时:
    如果按下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按钮之前,该程序永远不会播放声音文件,因为getch()部分在继续之前需要

但是,即使这部分代码不在乎我按下任何内容,程序也不会卡在while循环中吗?

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 'x00xe0':  # 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')

相关内容

  • 没有找到相关文章

最新更新