如何在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 中播放音频通知

如何在python中运行其他代码时在后台运行循环

Windows 的声音管理器类

摇动时在背景中播放歌曲

如何在播放该歌曲的声音文件时逐字母读取python中的歌曲[关闭]

java js前端请求后台去获得音频流,然后播放音乐,音乐可以控制进度,显示总时长