今天刷抖音的时候刷到一个车主说自己的车载音乐(本地U盘音源)使用随机播放有很多歌曲从来都没有播放过(因为他有好几百首歌),除非手动点播,但是列表播放,又会出现长时间同一个歌手的音乐,很烦恼。于是乎我就顺手做了个程序,帮他解决这个问题。

这里缙哥哥以两位歌手的歌曲为例,正常情况下顺序播放就是先听完任贤齐的,再听孙燕姿的。
于是我就弄了个增加文件名前缀的工具,暂定4位随机数,也就是说你 U 盘当中只要不多于 9999 首歌都能使用,其实多了也没关系,毕竟后面文件名还不同。
软件下载
- 无需 Python 环境可直接执行 MP3车载音乐随机播放工具.zip
- 需要 Python 环境双击可执行 MP3车载音乐随机播放工具.py
使用说明
将你存放音乐的 U 盘插入电脑,解压MP3车载音乐随机播放工具.zip
压缩包运行 mp3.exe 程序,如果你的电脑有 Python 也可以下载运行 py 文件。

界面超级简单,选择 mp3 歌曲文件所在的路径,点击确认即可。

这里会有个二次提醒,毕竟要重命名文件名,意味着打乱顺序,所以建议复制备份一个,不是自己想要的结果还可以恢复原来的状态。

运行的时候还提示这个,直接允许即可。文末放 Python 源代码,执行 py 也可以同样实现。这里做成 exe 可执行文件是怕某些小伙伴电脑上没有 Python 环境。

这个时候再插入车子里,即便按列表播放,它也是“随机播放”了,并且能确保每首歌都能播放到位,除非你自己切歌。
Python 源码
import os
import random
import string
import datetime
from pathlib import Path
import tkinter as tk
from tkinter import messagebox, filedialog
def generate_random_prefix(length=4):
# 生成一个指定长度的随机字母和数字组合
letters = string.ascii_letters + string.digits
return ''.join(random.choice(letters) for _ in range(length))
def randomize_datetime(start_year=1980, end_year=datetime.datetime.now().year):
# 生成一个在指定年份范围内的随机日期时间
start_date = datetime.date(start_year, 1, 1)
end_date = datetime.date(end_year, 12, 31)
time_between_dates = end_date - start_date
days_between_dates = time_between_dates.days
random_number_of_days = random.randrange(days_between_dates)
random_date = start_date + datetime.timedelta(days=random_number_of_days)
random_time = datetime.time(
hour=random.randint(0, 23),
minute=random.randint(0, 59),
second=random.randint(0, 59)
)
return datetime.datetime.combine(random_date, random_time)
def process_mp3_files(directory):
# 获取目录中所有的MP3文件
mp3_files = [f for f in directory.iterdir() if f.suffix.lower() == '.mp3']
for file in mp3_files:
# 生成一个新的文件名,前面加上随机前缀
random_prefix = generate_random_prefix()
new_filename = f"{random_prefix}-{file.name}"
new_filepath = file.parent / new_filename
# 重命名文件
file.rename(new_filepath)
# 随机化文件的创建时间和修改时间
random_ctime = randomize_datetime().timestamp()
random_mtime = randomize_datetime().timestamp()
try:
os.utime(new_filepath, (random_ctime, random_mtime))
except OSError as e:
messagebox.showerror("错误", f"设置时间戳时出错 {new_filepath}: {e}")
def on_select_drive():
# 弹出文件对话框选择U盘路径
drive_path = filedialog.askdirectory(title="选择U盘(文件)路径")
if drive_path:
selected_drive.set(drive_path)
confirm_button.config(state=tk.NORMAL)
def on_confirm():
# 获取选定的驱动器路径
drive_path = selected_drive.get()
if not drive_path:
messagebox.showwarning("警告", "请选择一个U盘(文件)路径")
return
# 提示用户操作风险并询问是否继续
response = messagebox.askokcancel("重要提醒", "该操作将会重命名文件名,建议使用前备份一下!继续吗?")
if not response:
return
drive_directory = Path(drive_path)
if not drive_directory.exists():
messagebox.showerror("错误", "指定的路径不存在,请检查路径是否正确")
return
# 处理MP3文件
process_mp3_files(drive_directory)
messagebox.showinfo("完成", "处理完成!")
# 创建主窗口
root = tk.Tk()
root.title("车载音乐随机播放工具 - by:缙哥哥的博客 www.dujin.org")
# 变量
selected_drive = tk.StringVar()
# 控件
label = tk.Label(root, text="选择U盘(文件)路径:")
label.pack(pady=10)
entry = tk.Entry(root, textvariable=selected_drive, width=50)
entry.pack(pady=5)
select_button = tk.Button(root, text="浏览...", command=on_select_drive)
select_button.pack(pady=5)
confirm_button = tk.Button(root, text="确认", command=on_confirm, state=tk.DISABLED)
confirm_button.pack(pady=20)
# 运行应用程序
root.mainloop()
评论前必须登录!
注册