python - 打印到屏幕后如何播放声音?
问题描述
我正在尝试编写一个在显示摩尔斯电码的同时播放摩尔斯电码声音的程序。
我遇到的问题是在程序中显示摩尔斯电码之前播放声音。该程序有一个基于 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
先执行,声音也会先播放,完成后会显示摩尔斯电码。
解决方案
这是因为 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 会使函数异步运行。
推荐阅读
- java - 杰克逊将整数解析为双精度
- email - cakephp 2.7 电子邮件发送问题。不允许使用 SMTP 身份验证方法,请检查 SMTP 服务器是否需要 TLS
- rust - 如何避免并行运行一些测试?
- c# - Nuget 更新:文件已在使用中 [并发文件访问]
- node.js - VUE.js JavaScript 安装问题
- laravel-5.6 - 重置密码laravel 5.6后限制登录
- matlab - MATLAB R2015b 中 getframe 的奇怪行为
- javascript - Recaman 序列的可视化
- php - 拉拉维尔 5.6。Monolog处理器如何推送
- java - 如何从java索引插入shell脚本