我正在尝试在PyQt应用程序中使用sounddevice OutputStream播放声音。
我想要像
这样的东西import sounddevice as sd
def callback(...):
#stuff that works with a "with" statement
class MyApp(QtWidgets.QMainWindow):
def __init__(self):
#stuff and buttons
def startSound(self):
#called by a button
self.streamInstance = sd.OutputStream(settings)
def stopSound(self):
#called by another button
self.streamInstance.close()
现在这不起作用,但如果我设置:
with sd.OutputStream(settings):
#a loop
它可以工作,但我无法阻止其他功能的流,应用程序停止运行。
如果有人想要解决方法或解决方法,我们将不胜感激
答案 0 :(得分:0)
该流不会在初始代码示例中启动,因为您需要在其上显式调用streamInstance.start()
以开始处理。将其包含在with
块中(由_StreamBase
超类的__enter__
方法定义)时,将自动完成此操作。
正如Matthias所说,要说出为什么不包含更多代码就无法停止来自另一个函数的流是不可能的。如果with
中的循环正在阻塞并且您没有使用多线程,则可能是另一个函数从未被调用。