如何在python中动态显示文本时在后台播放声音?
Posted
技术标签:
【中文标题】如何在python中动态显示文本时在后台播放声音?【英文标题】:How to play the sound in background while the text is being dynamically displayed in python? 【发布时间】:2017-05-26 07:23:14 【问题描述】:我想连续播放哔声,直到文本在终端上动态显示。这是我的代码。
import time
import sys
import winsound
winsound.Beep(1000, 5000)
def printf(s):
for c in s:
sys.stdout.write('%s' % c)
sys.stdout.flush()
time.sleep(0.0203)
printf("Hello I am Jishan Bhattacharya.")
【问题讨论】:
这闻起来像多线程,如果首先不起作用,则可以作为另一个线程执行 beep 并写入文本,因此它们将并行执行,multithreadingmultiprocessing。多线程更简单,但有可能因为python GIL而无法工作(python实际上不能使用线程,只能快速切换执行路径) 【参考方案1】:你需要做这样的事情,但我的测试表明你不能将它与 Beep 一起使用。你可以将声音保存为 wav 文件。
winsound.PlaySound(sound, winsound.SND_ASYNC)
【讨论】:
【参考方案2】:您可以创建一个新线程并开始运行它,创建一个 bool 来停止线程though this will cause little pauses。
没有明显的方法可以使用哔声并使其动态停止。
import threading
class beeper(threading.Thread):
def run(self):
self.keeprunning = True
while self.keeprunning:
winsound.Beep(freq, dur) // make a short dur to make sure it stops soon after printing ends
beep = beeper()
beep.start()
printf(string)
beep.keeprunning = False
【讨论】:
请将“winsound.beep”编辑为“winsound.Beep”。我试过你的代码,但问题是在文本显示完成后哔声也会继续。 添加了一个停止子句,缩短持续时间,以便验证它应该经常运行 尝试了您的代码,但这次它动态地无限次打印文本,并且在哔哔声之间也发生了中断,这看起来很奇怪。以上是关于如何在python中动态显示文本时在后台播放声音?的主要内容,如果未能解决你的问题,请参考以下文章
当应用程序在后台时在 Windows phone 8 中播放音频通知