Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在PyQT4中读取并发音频文件_Python_Multithreading_Python 3.x_Pygame_Pyqt4 - Fatal编程技术网

Python 在PyQT4中读取并发音频文件

Python 在PyQT4中读取并发音频文件,python,multithreading,python-3.x,pygame,pyqt4,Python,Multithreading,Python 3.x,Pygame,Pyqt4,我正在开发一个GUI应用程序,它可以播放音乐文件(由用户选择),同时播放这些音乐文件后面的背景声音,,同时保持一个响应良好的GUI主窗口。我试图使用多个线程来迭代for循环,调用列表中的每个文件,并将其传递给pygame,以便用户可以玩它。我用pyQt4研究了多线程,并尝试了各种不同的方法,我想这里的人可能会帮助我 这是下面我的GUI类中的一个方法: 我的线程类: 以及传递到Thread()类的QObject: 任何和所有的帮助将不胜感激 您当前的解决方案中有哪些不起作用?是否出现错误、线程是否

我正在开发一个GUI应用程序,它可以播放音乐文件(由用户选择),同时播放这些音乐文件后面的背景声音,,同时保持一个响应良好的GUI主窗口。我试图使用多个线程来迭代for循环,调用列表中的每个文件,并将其传递给pygame,以便用户可以玩它。我用pyQt4研究了多线程,并尝试了各种不同的方法,我想这里的人可能会帮助我

这是下面我的GUI类中的一个方法: 我的线程类: 以及传递到Thread()类的QObject:
任何和所有的帮助将不胜感激

您当前的解决方案中有哪些不起作用?是否出现错误、线程是否未运行等?一旦线程启动,gui就会无响应,并且在播放第一个文件(并第二次迭代for循环)后,gui会冻结并停止播放。我希望能够在线程运行时保持GUI的响应性,并让它遍历列表中的每个项目,而不仅仅是一个项目1)pygame.mixer.get_busy():很容易导致无限循环,占用所有CPU并导致问题。2) 我以前从未见过
\uuu del\uuu
方法中的代码——请注意,当您执行
del obj
时,对象不会调用该方法,而是当Python删除该对象时。(令人困惑)
def playsession(self):
    """ Session Player """
    if self.sessioncreated is True:
        self.statusBar.showMessage("Now Playing...")
        for x, i in enumerate(self.finalmusiclist): # A list of all of the files the user has selected to play
            mainThread = Thread()
            backThread = Thread()
            main = SessionPlayer(i)
            back = SessionPlayer(self.backgroundsoundslist[x]) # Passing In the Background sounds for iterated loop
            main.moveToThread(mainThread)
            back.moveToThread(backThread)
            mainThread.started.connect(main.play)
            mainThread.finished.connect(mainThread.quit)
            backThread.started.connect(back.play)
            ambThread.finished.connect(backThread.quit)
            mainThread.start()
            backThread.start()
class Thread(QtCore.QThread):
 def __init__(self, parent=None):
    QtCore.QThread.__init__(self, parent)

 def start(self):
    QtCore.QThread.start(self)

 def run(self):
    QtCore.QThread.run(self)

 def __del__(self):
    self.wait()
class SessionPlayer(QtCore.QObject):
 def __init__(self, playfile):
    QtCore.QObject.__init__(self)
    self.playfile = playfile

 @QtCore.pyqtSlot()
 def play(self):
    """Method To Play Music Files With Background Simultaneously"""
    pygame.init()
    pygame.mixer.init(FREQ, BITSIZE, CHANNELS, BUFFER)
    nextsnd = pygame.mixer.Sound(self.playfile)
    nextsnd.play()
    while pygame.mixer.get_busy():
        pass
    self.finished.emit()

 def __del__(self):
    self.wait()