带线程的Python MP3Play

2024-09-25 06:24:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试用python创建MP3Player(不使用任何花哨的gui,只使用基本的命令行)。您可以输入命令,如“playlist”打印所有歌曲,或“play[num]”在播放列表中播放指定的歌曲。我可以在一个线程中完成这一切,但是我想要的是创建另一个线程,这样你可以在实际音乐播放时执行更多的命令,如“添加歌曲”或“删除歌曲”(而不是命令行等待音乐结束)。以下是我的一条线:

import mp3play, time
clip = mp3play.load(song)
clip.play()
time.sleep(clip.seconds()) #Waits the duration of the song
clip.stop()
#Command line asks for input after this

这一切都很好,但是当我试图实现线程化时,就像这样:

^{pr2}$

它出故障了。这一切似乎都很好,直到你关闭应用程序的一半,音乐仍然继续运行。要停止音乐,我必须打开任务管理器并结束任务。所以我想也有一个“stop”命令,它不会关闭线程,但是它会使用

clip.stop()

我不知道如果你试图stop()一个没有运行的剪辑会发生什么,所以我实现了一个预防系统(布尔函数运行,检查它是否在运行)。但现在什么都不管用,到目前为止我的代码是:

def play(filename):
    global clip
    clip.play()
    time.sleep(clip.seconds())
    clip.stop()

playing = False
clip = ""

#Get user input
#blah blah blah command stuff
#User inputted "play"
thread.start_new_thread(play,("some_random_song.mp3",))
playing = True
#Goes back to command line
#User inputted 'stop' this time
if playing:
    clip.stop()
    playing = False

但当我试着运行这个程序时剪辑播放()在线程中,但不启动它。我不知道我该怎么解决这个问题,如果不穿线也能做到这一点。提前谢谢。在


Tags: 命令行命令playcliptimesong音乐sleep
1条回答
网友
1楼 · 发布于 2024-09-25 06:24:17

最好使用不同的进程播放MP3,使用multiprocessing.Process。在

编写一个获取MP3文件路径的函数,并以Process开头。在

由于技术原因,主要的python实现(来自python.org网站)限制线程,以便一次只能有一个线程执行python字节码。这可能永远不会是无故障的。在

相关问题 更多 >