一、前言
最近工作上有一个需求,就是要一个可定时播放指定的或随机的音频,并可以实现多任务的简单软件。于是到网上“走”了一遍,感觉特累和受到各种欺骗,于是写下此文。
不管是仅满足我这个要求小众软件,还是在此需求之上的一些定时播音软件,网上都有很多,有仅能在XP平台稳定运行的、界面排版丑陋的、功能简单的,各种参差不齐。此外,这些软件还有一个共同的特点那就是——付费。
令我懊恼的不是付费这个模式,而是软件的“推广”模式,这些软件在互联网或各软件市场打着“XXXX 破解版”、“XXXX 含注册密钥”等幌子,骗取下载量。然而下载下来的,确仍是需要注册的,而且有的还涉及病毒、捆绑安装等,真的是各种套路防不胜防。而且还有一个过程就是,每个软件都需要安装一遍真知道合适不合适,这样一来,如果是在本地真实主机安装,各个软件都装一次,那么主机就会充斥着各种危险,说真的没点虚拟化技术在手还真是够呛。
由于找了许久都没有找到符合且不收费的软件,于是就尝试使用Python写一个,便有了下文。当然也是写的很简陋,主要是以满足需求为主,大家可以参考一下,根据情况改成自己需要的功能也容易。
二、依赖及环境
- 安装 Python 3.7 以上程序
- 安装pygame模块
- 在代码文件当前目录新建music和music2 目录,并存入相应的.mp3音频文件
三、实现代码
创建一个名为 autoplayer 工程,并在工程下新建一个main.py 的文件,然后写入以下代码:
# coding:utf-8
import pygame
import os
import time
import random
def play_music(file):
pygame.mixer.init()
pygame.mixer.music.load(file)
pygame.mixer.music.stop() # 如果有上次未停止的播放,则先停止
pygame.mixer.music.play()
def task_1():
dir_list = os.listdir('./music')
random.shuffle(dir_list) # 随机打乱
file = './music/' + random.choice(dir_list) # 随机选歌
try:
play_music(file)
play_log("task_1", "succees", file)
except:
play_log("task_1", "fail", file)
def task_2():
file = './music2/说散就散.mp3'
try:
play_music(file)
play_log("task_2", "succees", file)
except:
play_log("task_2", "fail", file)
def play_log(task_name, status, task):
now_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
with open('./play.log', 'a+', encoding='utf-8') as fp:
content = now_time + '\t' + task_name + '\t' + status + '\t' + task + '\n'
fp.write(content)
def display_introduction():
# 自定义显示界面
os.system('cls')
print('******************************** 由 WQT 恶搞制作 *******************************', '\n')
print(' 【定时播音系统】已启动,请勿关闭此窗口.....', '\n')
print(' 若因误操作关闭,请按以下说明恢复:')
print(' Step1: 双击桌面的【定时播音系统】图标即可重新启动程序。')
print(' Step2: 同一时刻,只保留一个运行窗口,如若运行多次,多余的窗口请手动关闭。', '\n')
print(' PS: 播放器使用说明,请查看 /autoplayer/ 目录下的 readme.txt 文档.', '\n')
print('**********************************************************************************', '\n')
def main():
display_introduction()
while True:
task_time = time.strftime("%H:%M:%S")
time.sleep(0.8) # 适当控制循环速度(0.5 < 系数 < 1)
print("\r 当前系统时间: %s" %task_time, end=" ")
if task_time == "13:28:00": # 任务一
task_1()
if task_time == "16:00:00": # 任务二
task_2()
if __name__ == "__main__":
main()
上述程序中,关键代码没几行,主要还是做了一些日志功能和说明信息什么的,多搞的几行。其中,task_1 函数主要负责定时从 music 目录中随机抽取MP3音频,然后播放, task_2 主要负责定时播放存放在 music2 目录内的指定音频。
四、执行程序
这里提供两种思路运行程序:
- (1)使用 Python 常见的
python main.py
方式运行程序。启动程序后,会在指定时间播放指定或随机音频文件。 - (2)在与main.py同级目录内创建一个 AutoPlayer.bat 文件,并写入以下代码,便可在 windows 平台下直接双击 bat 文件启动程序。
@echo off
python main.py
exit
这时直接双击 AutoPlayer.bat 文件便可启动程序。注意此方法(方法2)仅适用于 windows 平台。
如需在桌面启动或在指定位置启动,只需创建此bat脚本的快捷键即可(注意,不能变动原脚本的位置),如需进一步美化,还可修改快捷键的“图标”,以显得高大上.....
如需开机启动,可将 AutoPalyer.bat 的快捷键添加到系统的 “启动”文件夹内;如果定时执行或启动,还可在系统创建“定时任务”以达到目的。
五、特殊说明
由于是以系统终端形式启动和运行的,在win10平台下,启动程序后,如果鼠标点击终端内部,程序会暂停,这时显示的时间会不动,需要恢复时,只需按空格键即可恢复(当实时时间恢复显示后,表示成功恢复)。在 win7 平台运行无此现象,至此猜测是平台的 cmd 问题,大家注意一下就好。
附上项目相关图片:
9 条评论
请问打包好的在哪里下载呢
好的,谢谢大神
大神,task_2播放完后能不能自动返回task_1继续播放啊?
两个任务是循环进行的,但只在与设定的任务时间匹配时才会执行播放。
大神,如果我想要task_1任务当做背景音乐循环播放,,task_2开始时task_1暂停,task_2播放完时,task_1继续播放,,有没有办法实现呢?
现有程序不行。你可以了解一下 `pygame` 这个库,实现应该不难。
博主,这个可以开源吗?
可以直接拿去使用,但如果是转载,希望留下本站的转载声明。
谢谢博主