与Python一起制作多个同时任务,以进行简单的音乐播放器

问题描述 投票:0回答:1

future.result()
阻止代码执行,直到返回为止,这意味着您的程序在继续之前一直在等待用户输入,因此,当当前一端结束时,播放器无法自动进入下一个轨道
python input audio-player
1个回答
0
投票
在单独的线程中运行输入处理

探测轨道完成播放

    control()
  1. 在此代码中,

    import threading import queue import time class Playback: def __init__(self): self.active = False self.paused = False def load_file(self, path): self.path = path self.length = 5 self.active = True def play(self): start_time = time.time() while time.time() - start_time < self.length: if not self.active: break if not self.paused: time.sleep(1) self.active = False def pause(self): self.paused = True def resume(self): self.paused = False def stop(self): self.active = False def control(input_queue): while True: cmd = input().strip() input_queue.put(cmd) if cmd == "stop": break def play_track(track): print(f"Playing {track['Title']} by {track['Artist']}...") playback = Playback() playback.load_file(track["Path"]) input_queue = queue.Queue() input_thread = threading.Thread(target=control, args=(input_queue,), daemon=True) input_thread.start() playback_thread = threading.Thread(target=playback.play) playback_thread.start() while playback.active: try: mediactl = input_queue.get(timeout=1) except queue.Empty: continue match mediactl: case "pause": playback.pause() print("Track is paused") case "resume": playback.resume() print("Track is resumed") case "stop": playback.stop() print("Playback is stopped") return case "next": playback.stop() print("Next track is playing") return "next" print("Track finished playing, moving to next track.") return "next"
  2. 在单独的线程上运行,侦听用户输入,并且使用A
  3. control()

    在输入线程和主要媒体播放器之间进行通信,而媒体播放器每秒都在不阻止排队的情况下检查每秒的用户输入。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.