def _recreate_outputter(self):
if self.samp_queue:
self.play(None)
self.samp_queue = queue.Queue(maxsize=self.queue_size)
stream_ready = threading.Event()
def audio_thread():
audio = pyaudio.PyAudio()
try:
audio_format = audio.get_format_from_width(self.samplewidth) if self.samplewidth != 4 else pyaudio.paInt32
self.stream = audio.open(format=audio_format, channels=self.nchannels, rate=self.samplerate, output=True)
stream_ready.set()
q = self.samp_queue
try:
while True:
sample = q.get()
if not sample:
break
sample.write_frames(self.stream)
if self.played_callback:
self.played_callback(sample)
if q.empty():
time.sleep(sample.duration)
self.all_played.set()
finally:
self.stream.close()
self.all_played.set()
finally:
audio.terminate()
outputter = threading.Thread(target=audio_thread, name="audio-pyaudio", daemon=True)
outputter.start()
stream_ready.wait()
评论列表
文章目录