私はPythonでMP3Playerを作成しようとしています。すべての曲を印刷する「プレイリスト」やプレイリストに指定した曲を再生する「再生[num]」のようなコマンドを入力することができます。私はこれをすべて1つのスレッドで行うことができますが、私が望むのは、別のスレッドを作成して、実際の音楽が再生されている間に(「曲を追加する」または「曲を削除する」などのコマンドを実行できるようにすることです音楽を完成させる)。ここで私は一つのスレッドで持っているものです。スレッドを使ったPython MP3Play
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
これは、すべての罰金とダンディに動作しますが、私はこのように、本の中にスレッドを実装しようとすると:
import mp3play, time
def play(songname):
clip = mp3play.load(song)
clip.play()
time.sleep(clip.seconds()) #Waits the duration of the song
clip.stop()
#Get user input here
#Check if user inputted command
#User inputed "play"
thread.start_new_thread(play,("some_random_song.mp3",))
それが出てグリッチ。あなたが曲の途中でアプリケーションを閉じ、音楽がまだ動作し続けるまでは、すべてうまくいくようです。音楽を停止するには、タスクマネージャを開いてタスクを終了する必要があります。だから私は、スレッドを閉じないであろう、だけでなく、「停止」コマンドを持っていることについて考えたが、それは
clip.stop()
は、私はあなたが)(ISNクリップを停止しようとすると何が起こるかわかりません使用します実行していないので、予防システム(ブーリアンが実行されているかどうかをチェックしている)を実装しました。しかし、今は何もこれまでのところ、ここで、機能していない私のコードです:
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
しかし、私はこれを実行しようとすると、それはスレッドで)(clip.playことを得るが、それを起動しdoesntの。どのように私はこれを回避することができますか、スレッド化せずにこれを行うことが可能かどうかはわかりません。前もって感謝します。
「再生」と入力すると音楽が再生されますが、次のコマンドを要求するポインタ「>」は表示されません(つまり、スレッドはmp3playの 'clip'のためにスリープ状態になります)。私は何か間違っているのですか? –