我在启动脚本时正使用python中的random模块来选择具有绝对路径的歌曲。我将歌曲变量加载到列表中并随机对其进行混洗,但是这些歌曲从不对random.choice
方法起作用。每次都以相同顺序播放歌曲。我如何实现随机选择要播放的三个声音文件中的任意一个的目标?
import random
import os
duration = 60
newSongLocation1 = "~/Desktop/work/auto_response/boot_sequence_offline.wav"
newSongLocation2 = "~/Desktop/work/auto_response/boot_sequence_online.wav"
newSongLocation3 = "~/Desktop/work/auto_response/welcome_to_the_future.wav"
playSong1 = os.system('aplay -q -d {} {}'.format(duration, newSongLocation1))
playSong2 = os.system('aplay -q -d {} {}'.format(duration, newSongLocation2))
playSong3 = os.system('aplay -q -d {} {}'.format(duration, newSongLocation3))
songArray = [playSong1,
playSong2,
playSong3]
random.shuffle (songArray,random)
random.choice(songArray, random)
答案 0 :(得分:2)
os.system()
调用完成了运行这些命令的实际工作,并阻塞直到完成。您应该为要播放的歌曲生成随机排序的列表,然后循环播放它们。
import random
import os
duration = 60
songLocations = [
"~/Desktop/work/auto_response/boot_sequence_offline.wav",
"~/Desktop/work/auto_response/boot_sequence_online.wav",
"~/Desktop/work/auto_response/welcome_to_the_future.wav"
]
random.shuffle(songLocations)
for song in songLocations:
os.system('aplay -q -d {} {}'.format(duration, song))
编辑:要在每次运行脚本时播放一首随机歌曲,请将最后三行更改为
song = random.choose(songLocations)
os.system('aplay -q -d {} {}'.format(duration, song))
答案 1 :(得分:2)
您需要先随机播放,然后才能使用os.system()
播放歌曲。
此外,如果您只想播放特定数量的歌曲而不是整个列表,则可以在列表上使用random.shuffle()
,然后将列表切成所需的大小。
此外,我添加了一些建议,以使脚本更加健壮,将相同文本或代码的重复次数减少到最低限度,并添加了print语句以检查执行期间变量的状态。
也许是这样的:
import os
import random
num_songs = 2
base_cmd = 'aplay -q -d {} {}'
duration = 60
base_path = os.path.join('~', 'Desktop', 'work', 'auto_response')
filename_list = [
'boot_sequence_offline.wav',
'boot_sequence_online.wav',
'welcome_to_the_future.wav',
]
print('Before shuffle:', filename_list)
random.shuffle(filename_list)
print('After shuffle:', filename_list)
print()
print('Songs played:')
for filename in filename_list[:num_songs]:
cmd = base_cmd.format(duration, os.path.join(base_path, filename))
print(' cmd:', cmd)
os.system(cmd)