C#实现广播节目编排软件

1.需求诞生

小李在某地一家中学当保安,平时工作除了看门护院之外,还兼职负责全校广播打铃的工作。最近,学校唯一的一台广播机却坏了,小李只能每天掐着各种时间节点去手动播放大铃声以及广播歌曲,这可把小李累得不要不要的。就在昨天上午,小李因为刷抖音入迷,忘了打上课铃,让10分钟的课间休息变成了半个多小时,把学生们高兴坏了,有人高兴就有人不高兴,王校长得知此事勃然大怒,把小李叫到办公室一顿训斥,“干得了就干,干不了赶紧滚蛋!”。

这可把小李给吓住了,这年头找一份工作可不容易。广播机虽然已找厂家来修,但因为厂家早已停产这款老型号,零配件都没有了,换新机吧,财务那边的申请流程又太长,不是一两周可以解决的。小李想来想去,决定向自己的好朋友“八两”求助。八两听完小李的哭诉,已基本了解到这个需求,决定为小李量身定做一款软件工具,帮助小李保住这份饭碗。

2.实现思路

广播机的主要功能无非就是设置定时播放指定的音频文件清单,并可以设置循环方式和指定播放时长,另外就是通过调音台或者直接一根音频线连接校园大喇叭,这样的功能完全是可以通过电脑软件实现的,而且用电脑软件还更方便修改配置和调整播放清单。

我的计划是,通过Windows自带的Media Player控件实现音频文件播放,然后通过代码设计一套节目编排逻辑,支持多套节目播放规则,每套节目可以单独保存为一个工程文件,这样便于实现不同季节的上课时间调整。

3.核心代码

3.1 定义播放任务的数据模型(PlayTask类)

首先,我们根据软件需求,设计了一个PlayTask类,用于存储播放任务,代码如下:

public class PlayTask
{
    public bool Enabled = true;
    public string Name = "新任务";
    public TimeSpan StartTime = TimeSpan.Zero;
    public TimeSpan TimeLen = TimeSpan.Zero;
    public int RepeatCount = 1;
    public List WeekPlan = new List(new DayOfWeek[] { DayOfWeek.Monday, DayOfWeek.Tuesday, DayOfWeek.Wednesday, DayOfWeek.Thursday, DayOfWeek.Friday, DayOfWeek.Saturday, DayOfWeek.Sunday });
    public List MusicList = new List();
}

当我们创建播放计划时,需要对一天多个时间点设置播放任务,每一个任务都可以用PlayTask来进行表示,对于这个类的定义,如果一时半会不好理解,可以再看一张软件界面截图:

C#实现广播节目编排软件_第1张图片

这个任务编辑界面,与PlayTask的定义完全对应起来。对于每个播放任务,可以设置的属性包括:

Enabled:是否启用这个任务。

Name:任务的名称,比如可以设置为“第一节(上课)”“第一节(下课)”“放学”等。

StartTime:开始执行播放任务的时间,这里用了TimeSpan的类型,是取DateTime的TimeOfDay属性值。

TimeLen:播放时长限制。如果设置为0则不限制,按照音乐文件总时长及重复次数进行播放。如果设置为指定秒数,则到时间点后无论音乐文件是否播放完毕都会强制结束。

RepeatCount:重复播放次数。

WeekPlan:表示这个任务在一个星期的哪些天中应该被执行。比如上下课的铃声,在周一至周五应该被执行,而周六周日通常不应该被执行。

MusicList:音乐文件的路径列表。每个任务至少应该包含一个音乐文件,也可以包含多个,多个文件时则按顺序进行播放。

3.2  控制播放器(Windows Media Player)

首先要添加Windows Media Player控件到工具箱中,在“选择工具箱项”对话框中选择“COM组件”,找到并勾选“Windows Media Player”,点击“确定”。如下图:

C#实现广播节目编排软件_第2张图片

然后将引入的Windows Media Player控件放置在窗体界面上,并修改名称为wmp。

要执行指定的播放任务时,可以参考一下代码:

private void play(PlayTask task)
{
    wmp.Ctlcontrols.stop();
    wmp.currentPlaylist.clear();
    foreach (string music in task.MusicList)
    {
        wmp.currentPlaylist.appendItem(wmp.newMedia(music));
    }
    wmp.Ctlcontrols.play();
}

如果要设置播放器的声音,并禁止向用户显示播放器的控制界面,可以使用如下代码:

wmp.settings.volume = 100;  //音量100
wmp.Ctlenabled = false;     //禁用控制

4.完整程序

经过1天的开发和调试优化,八两将软件发送给小李,小李拿到软件后,立即兴奋地到广播室测试,美妙而且准时的校园广播再次响起,王校长满意地对小李说,“小伙子好样的,当保安就是要这样一专多能!”

最终软件成品界面如下:

C#实现广播节目编排软件_第3张图片

 软件下载地址为https://download.csdn.net/download/yuechi01/88636163

你可能感兴趣的:(技术文章,c#)