随机模块不会混音加载到列表中的声音

时间:2019-07-02 19:37:29

标签: python

我在启动脚本时正使用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)

2 个答案:

答案 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)