【问题标题】:How to play in Python the sequence of audio files one after another?如何在Python中一个接一个地播放音频文件序列?
【发布时间】:2019-10-08 15:02:56
【问题描述】:

我想在 Python 3.7.3 中制作一个音频播放器,它将按顺序播放歌曲,一个接一个。 在这里,您将看到“JustPlay”功能。而不是一个接一个地播放,它只播放第一首歌。在没有“休息”之前,它只播放了最后一个。如何让它一个接一个地播放?

from tkinter import *
from pygame import mixer
import random

root = Tk()

menubar = Menu(root)
root.config(menu=menubar)

subMenu = Menu(menubar, tearoff=0)
menubar.add_cascade(label="File",menu=subMenu)
subMenu.add_command(label="Open")
subMenu.add_command(label="Exit")

subMenu = Menu(menubar, tearoff=0)
menubar.add_cascade(label="Help",menu=subMenu)
subMenu.add_command(label="About us")

mixer.init()
root.title("Melody")
text = Label(root, text = "The name of an album")
text.pack()

a = "C:/Pathway1"
b = "C:/Pathway2"
c = "C:/Pathway3"
d = [a, b, c]

def song1():
  mixer.music.load(a)
  mixer.music.play()

def song2():
  mixer.music.load(b)
  mixer.music.play()

def song3():
  mixer.music.load(c)
  mixer.music.play()

def stop_music():
  mixer.music.stop()

def set_vol(val):
  volume = int(val) / 100
  mixer.music.set_volume(volume)

def Randomplay():
  mixer.music.load(random.choice(d))
  mixer.music.play()

def JustPlay(): 
  for x in d:
   mixer.music.load(x)
   mixer.music.play()
   break


playbtn1 = Button(root, text="song1", command=song1)
playbtn1.pack()

playbtn2 = Button(root, text="song2", command=song2)
playbtn2.pack()

playbtn3 = Button(root, text="song3", command=song3)
playbtn3.pack()

randombtn = Button(root, text="Random", command=Randomplay)
randombtn.pack()

justplaybtn = Button(root, text="Play", command=JustPlay)
justplaybtn.pack()

stopbtn = Button(root, text="Stop", command=stop_music)
stopbtn.pack()

scale = Scale(root, from_=0, to=100, orient=HORIZONTAL, command=set_vol)
scale.pack()

root.mainloop()

【问题讨论】:

    标签: python audio


    【解决方案1】:

    你可以使用 mixin.music 中的 .queue() 函数来排队一堆歌曲 - 所以我会加载一个,排队剩下的,然后运行 ​​play()

    mixer.music.load(a)
    [mixer.music.queue(track) for track in [b,c,d]]
    mixer.music.play()
    

    【讨论】:

    • 谢谢!但它在我的电脑上不起作用。我尝试使用队列以其他方式执行此操作,但它仍然只播放我加载的歌曲(在本例中为 a)。
    【解决方案2】:

    你可以使用线程模块。它允许你按顺序播放音乐并使用你的 TK。 只需编写如下函数:

    def the_nexts(index,size,musiclist):
    while index<size-1:
        current=musiclist[index]
        mixer.music.queue(current)
        song_mut = MP3(current)
        song_length = song_mut.info.length
        converted_song_length = time.strftime('%S', time.gmtime(song_length))
        time.sleep(float(converted_song_length))
        
    

    musiclist 是包含音乐名称的列表。您可以将索引初始化为 0。列表的大小长度 song_mut = MP3(current)-->do from mutagen.mp3 import MP3 它可以让您知道音乐的长度(以秒为单位),因此您将在前一个结束之后将歌曲添加到队列中歌曲(这是必需的,因为 while 将仅在音乐结束后使用 index+1 进行迭代。) 主叫是Thread(target=the_nexts,args=(index,size,musiclist)).start()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-06
      • 1970-01-01
      • 1970-01-01
      • 2012-03-08
      相关资源
      最近更新 更多