首页 > 解决方案 > 打印到屏幕后如何播放声音?

问题描述

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

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

   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先执行,声音也会先播放,完成后会显示摩尔斯电码。

标签: pythonpython-playsound

解决方案


这是因为 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 会使函数异步运行。


推荐阅读