我希望我的脚本在第一个声音结束时播放第二个声音。来自tkSnack 文档:
play ( )
Plays the sound. All options are ignored if play() is used to resume a paused play options.
If a play() command is issued while another one is in progress,
the latter one is queued up and starts to play as soon as possible.
所以,我认为在播放歌曲时调用声音对象的播放方法会导致第二首歌曲在这首歌曲结束时开始播放。
不幸的是,这似乎没有发生。实际上,当我read在声音对象上调用该方法时,为了加载音频文件,播放器会停止播放。
我应该如何加载音频?
我也尝试使用两个不同的声音对象,但这会导致重叠播放。
到目前为止,我找到的唯一解决方案是使用该方法的blocking选项play。并将其添加到循环中:
for song in songList:
SoundObject.read(song)
SoundObject.play(blocking=True)
然而,这远非一个好的解决方案,因为它会阻塞整个应用程序,即使我在守护线程中启动它也是如此。
这是一个示例代码:
import Tkinter, tkSnack, time
win = Tkinter.Tk()
tkSnack.initializeSnack(win)
snd = tkSnack.Sound()
def play1():
snd.read('/home/francesco/Musica/Andrea Bocelli - Ave Maria.mp3')
snd.play()
def play2():
snd.read('/home/francesco/Musica/Andrea Bocelli - La voce del silenzio.mp3')
snd.play()
b1 = Tkinter.Button(win, text="play1", command = play1)
b2 = Tkinter.Button(win, text="play2", command = play2)
b1.pack()
b2.pack()
win.mainloop()
我希望单击play2它会将配乐“附加”到当前音轨,并在第一个音轨结束后立即启动。