启动和停止不同功能的SoundDevice流

时间:2017-06-14 00:50:34

标签: python pyqt python-sounddevice

我正在尝试在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

它可以工作,但我无法阻止其他功能的流,应用程序停止运行。

如果有人想要解决方法或解决方法,我们将不胜感激

1 个答案:

答案 0 :(得分:0)

该流不会在初始代码示例中启动,因为您需要在其上显式调用streamInstance.start()以开始处理。将其包含在with块中(由_StreamBase超类的__enter__方法定义)时,将自动完成此操作。

正如Matthias所说,要说出为什么不包含更多代码就无法停止来自另一个函数的流是不可能的。如果with中的循环正在阻塞并且您没有使用多线程,则可能是另一个函数从未被调用。