Поток прекращает выполнение при создании аудиосегмента из pydub

#python #multithreading #pydub #audiosegment

#python #многопоточность #pydub #аудиосегмент

Вопрос:

Я создаю приложение, которое будет воспроизводить аудио в другом потоке. Поток работает нормально, пока не дойдет до инструкции, в которой я создаю AudioSegement из pydub библиотеки. Я хочу, чтобы он продолжал выполняться после этого оператора, чтобы звук воспроизводился в фоновом режиме.

 def add_stream_queue(self):
     search_result = self.search()
     stream = Stream(search_result.get_title(), search_result.get_link())
     self.stream_queue.append_queue(stream)
     if self.first_stream:
         self.stream_thread = threading.Thread(target=self.stream_queue.play_stream_queue, args=[self.play_audio])
         self.stream_thread.start()
  

Здесь я создаю поток, и он вызывает функцию, play_stream_queue() которая находится в классе StreamQueue .

 def play_stream_queue(self, play_audio):
    while self.current_stream < self.get_size():
        self.first_stream = False
        self.manage_stream.download_stream(self.get_stream(self.current_stream).get_link())
        play_audio.start(self.get_stream(self.current_stream).get_title())
        self.current_stream  = 1
        print("reached")
    self.first_stream = True
  

В этой функции я начинаю воспроизводить звук в строке play_audio.start(...) . На этом этапе поток выполнялся идеально.

 def start(self, filename):
    self.filename = self.STREAM_FOlDER   filename   ".m4a"
    self.stream_file = AudioSegment.from_file(self.filename, format="m4a")
    print("TEST")
    # Create an interface to PortAudio
    self.p = pyaudio.PyAudio()
    .
    .
    .
  

В PlayAudio классе поток вызывает у меня проблемы. Поток будет работать нормально, пока не достигнет инструкции,

 self.stream_file = AudioSegment.from_file(self.filename, format="m4a")
  

Поток не будет продолжен после этого утверждения.

Странная часть заключается в том, что раньше он работал отлично, и поток продолжал бы выполняться после этого оператора, но затем он случайным образом перестал работать. Я также замечаю, что если в программе возникнет ошибка и произойдет сбой, stream_thread начнется воспроизведение.