一、前言

最近工作上有一个需求,就是要一个可定时播放指定的或随机的音频,并可以实现多任务的简单软件。于是到网上“走”了一遍,感觉特累和受到各种欺骗,于是写下此文。
不管是仅满足我这个要求小众软件,还是在此需求之上的一些定时播音软件,网上都有很多,有仅能在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 问题,大家注意一下就好。

附上项目相关图片:

AutoPlayer

AutoPlayer-img.jpg

最后修改:2022 年 06 月 07 日
如果觉得我的文章对你有用,请随意赞赏