打印到屏幕后如何播放声音?

How to play sound after printing to the screen?

我正在尝试编写一个程序,在显示摩尔斯电码的同时播放摩尔斯电码的声音。

我遇到的问题是在程序中显示摩尔斯电码之前先播放声音。该程序有一个 UI 基于 tkinter:

   for item in self.morse_code:
        self.output_text_area.config(state="normal")
        self.output_text_area.insert(END, item)
        self.output_text_area.config(state="disable")
    play_sound(self.morse_code)

我正在使用 playsound 库,下面是负责播放声音的函数:

from playsound import playsound

def play_sound(morse_code: list):
    print(morse_code)
    for code in morse_code:
        print(code)
        for char in code:
            if char == '-':
                playsound('sound/morse_line.mp3')
            elif char == '.':
                playsound('sound/morse_dot.mp3')
            elif char == '|':
                continue
            time.sleep(0.05)
        time.sleep(1)

如何让程序先显示莫尔斯电码,然后再播放莫尔斯电码声音?目前,即使更新 text_area 的代码先执行,声音也会先播放,然后在完成后会显示摩尔斯电码。

这是因为 playsound 函数有一个“block”参数,它会阻止执行直到声音完成执行。默认情况下,此参数为“True”。 将其更改为“False”,您就可以开始了:

from playsound import playsound

def play_sound(morse_code: list):
print(morse_code)
for code in morse_code:
    print(code)
    for char in code:
        if char == '-':
            playsound('sound/morse_line.mp3', block=False)
        elif char == '.':
            playsound('sound/morse_dot.mp3', block=False)
        elif char == '|':
            continue
        time.sleep(0.05)
    time.sleep(1)

但是,您可能希望同时打印和播放声音,在这种情况下,只需遍历字符串中的每个字母,单独打印并播放声音,而不是一起打印在函数的开头。

来源:https://pypi.org/project/playsound/

上的 Playsound 文档

相关部分:playsound 模块只包含一件事 - 函数(也称为)playsound。

它需要一个参数 - 包含您要播放的声音的文件的路径。这可能是本地文件,或 URL.

还有一个可选的第二个参数 block,默认设置为 True。将其设置为 False 会使函数 运行 异步。