舞台视效联动控制系统旨在实现一个集成化、一体化的综合控制台,该控制台可以实现对舞台灯光的控制及多路、多格式媒资内容的播放控制。因此,在功能上,主要有以下需求:可以预先编排灯具的动作及所要播放的媒资内容的播放顺序,在表演时可以准确控制灯具,从而实现灯具的调光、变色、旋转等功能,同时能够实现对所要播放的媒资内容的编辑、播放/暂停及播放速度的控制。此外,在可用性上,要实现界面的简单友好,所见即所得,用户可以通过该系统实现对舞台灯光与视频设备方便快捷的控制。
1舞台视效联动控制系统总体设计
1.1 系统硬件设计
舞台视效联动控制系统的硬件整体,可以划分为前面板和主控模块两部分,系统硬件结构图见图1。其中,前面板主要负责搜集和发送键盘数据,主控模块为系统的核心部分,主要负责逻辑运算的处理以及对视效设备的控制,主控模块通过RS485总线与前面板进行通信。系统主控模块采用PC级别的主板,并结合FirePro W7000专业显卡,通过内置输出板卡来实现不同形式的信号的输出,通过DMX接口输出DMX控制信号,实现对灯光的控制,通过DVI接口或DP1.4接口输出视频信号到投影机或者LED屏等显示设备,实现对视频的控制。
1.2 软件总体设计
舞台视效联动控制系统软件采用分层的设计思路,将系统软件划分为界面层和核心层,各层之间分别独立设计,通过调用接口函数实现层与层之间的数据交换。在划分层次的基础上,分别对各层进行功能模块划分,软件总体架构图见图2。
1.3 软件核心层设计
舞台视效联动控制系统需要实现对常规灯与电脑灯的控制,而电脑灯的种类多种多样,每种灯具所实现的功能也各不相同,为了实现对电脑灯的控制,系统应该具备支持用户添加自定义灯库文件的功能,该功能由灯库配置模块实现。所谓灯库文件,是对一个灯具的描述,该系统采用XML语言对设备进行描述。
对灯库文件进行加载与保存操作时,需要对XML文件进行解析,采用QXmlStreamReader类和QXmlStreamWriter类进行解析,相比较Qt的SAX解析器,这种方式速度更快、更方便。
由于系统中通常需要保存数量庞大的灯库文件,为了提高程序的运行效率及用户的使用体验,避免一些不必要的性能开销,灯库配置模块采用延迟加载的方式,在对象创建时,仅将灯库文件的路径存储起来,并不对灯库文件进行解析,直到真正使用该对象时才进行解析。解析之前,先检测该灯库文件是否加载完成,如果当前是第一次使用该对象,则会使用之前存储的灯库文件的路径来完成灯库文件的解析,完成以上过程才真正完成一个灯库文件的加载。
灯光功能模块主要负责实现单步场景、序列、内置图形等功能,视频功能模块则负责实现视频的编辑与播放功能。其中,视频的编辑功能主要有画中画、多路视频拼接、字幕添加等功能。灯光功能及视频功能具有常用的公共接口,这些接口主要负责实现功能ID的设置与获取,功能的名称、种类、运行时间、运行状态的设置等。
数据管理模块负责管理灯光控制信号的输入与输出,采用插件模式进行构建,以支持多种灯光控制协议及数据传输方式。该模块以Universe类为核心,提供可以安装输入输出插件的接口,通过安装需要的插件,完成对输入和输出接口的配置。所有的输入输出插件的加载与缓存均交由SVELCIOPluginCache类进行管理,通过load方法进行插件的加载,加载后通过InputPatch类与OutPatch类分别对输入和输出插件进行包装,将包装后的插件交由InputOutputMap类进行统一管理,根据每个插件的配置将其与相应的Universe对象进行绑定。数据管理模块关系框图见图3。
任务调度模块的核心目标是保证系统内部运行的灯光功能及视频功能能够按照用户设定的时间,准确实时地进行调度与执行,同时,也允许用户根据实际需要,随时启动和停止任务调度、调整灯光功能与视频功能的执行顺序。
任务调度模块,包括调度管理和调度执行程序两部分。调度管理负责为需要调度的对象提供工作空间,每一个灯光功能通常包含以下内容:实现该功能要使用的灯具,灯具的配接信息,灯具各个通道的DMX值,以及该功能的运行时间。因此,核心层其他模块中的实例对象均由调度管理部分进行统一管理,这为内存对象的管理提供了很大的便利。调度执行程序部分则负责实现实际的灯光功能与视频功能的调度,包括功能的启动、停止及调度。灯光功能与视频功能遵循的调度流程大致相同,以灯光功能为例,其调度流程见图4。
图4 调度流程图
首先创建一个功能对象,并进行运行时间、淡入淡出时间等属性的设置,将属性设置完毕后的对象添加到核心调度模块的Doc对象中,交由Doc对象进行管理,使用start方法启动功能对象舞台控制系统,并将其添加到调度执行程序,交由调度执行程序进行调度。每次调度时,调度执行程序首先对功能队列进行读取,若该对象在功能队列中有调用该对象的preRun方法,然后将其添加到运行队列中,并进行通道DMX的目标值及淡入淡出时间的设置。当调度执行程序从运行队列中获取到功能对象时舞台控制系统,会调用该功能对象的write接口,进行通道值及淡入时间的写入,生成当前的通道值,并将该值输出到数据管理模块。当调度执行程序发现该功能对象已经运行结束时,会调用该对象的postRun方法,将设置了淡出时间的通道添加到调度执行程序中。完成以上步骤以后,调度执行程序会将该功能对象从运行队列中移除。
1.4 软件总体框架
基于简单友好的原则,根据系统实现的功能,对系统软件界面进行模块划分,系统软件界面总体框架设计见图5。每个模块对应一个单独的选项卡,用户根据需求点击相关的选项卡,即可进入相应的模块进行操作。
2舞台视效联动控制软件的应用测试
基于Windows操作系统,在QtCreator下使用C++对软件的各个模块进行实现,并采用基于QtTest的单体测试方法对软件各部分进行单元测试,对各个模块的各类成员函数分别进行测试。经测试,各部分满足设计要求,运行正常。软件的主界面见图6。
用户可以点击界面左侧“打开文件”,从本地直接加载一个演出文件,在演出管理界面,点击“播放”按钮,即可运行。也可以新建一个空白的演出文件进行编辑。
点击软件主界面上方任意一个选项卡,将会进入对应的模块。点击“设备”选项卡,进入设备管理模块,在该模块可以对灯具进行添加、删除、编辑等操作。该模块界面的左侧有一个列表,负责显示当前工作区中的所有已经配接的灯具信息。选择灯具后,窗口右侧会显示所选灯具的详细信息。点击界面上方的“添加灯具”按钮,将会弹出添加灯具对话框,在对话框左侧会显示所有可用的灯具制造商列表,每个灯具制造商栏下都包含一个或多个型号的灯具,单击列表中一个灯具时,对话框右侧将会显示该灯具的通道及模式信息,选择要使用的模式,并设置配接地址及配接数量,完成以上操作,点击确认即可完成灯具的配接。
点击“功能”选项卡,进入功能管理模块,功能管理模块见图7,在该模块可以进行功能的创建、删除及编辑等操作。创建各种功能的按钮位于该模块界面上方,界面下方的功能列表用于显示所有已经创建的功能,每种功能都设置了独立的项,每次创建的新功能都会出现在对应的类别下,创建新功能或者点击已经创建的功能时,界面会显示该功能对应的编辑器,每种功能都有属于自己的编辑器,在编辑器中所做的更改都会被立即存储到对应的功能中,不需要进行额外的确认操作。
以视频编辑器为例,点击视频编辑器中的“画中画”按钮,可以在当前视频播放窗口再打开一个文件进行播放,所实现的画中画效果见图8。点击视频编辑器中的“视频叠加”按钮,将弹出视频叠加界面,视频拼接效果见图9,最多可输入9路视频进行拼接,可自定义拼接方式与拼接画面大小,设定好文件输出路径,执行视频拼接指令即可完成多路视频的拼接操作。此外,用户可以将编辑完成的灯光功能或者视频功能,与界面下方的推杆进行配接,也可根据需要在“模拟控台”界面添加按钮、旋钮等部件与功能进行配接,在演出时直接使用推杆、旋钮、按钮即可快速运行相应的功能。
点击“Show”选项卡,进入演出管理模块,演出管理模块见图10。演出管理模块界面以多轨道的形式呈现,这是视频编辑软件的典型视图,用户可以根据灯光功能或视频功能开始运行的时间,将功能放置在时间轴指定的位置。灯光功能与视频功能基于相同的时间轴,可以很好地实现对灯光设备与视频设备的协同控制。
点击“模拟控台”选项卡,进入模拟控台管理模块,用户可以根据需要添加按钮,推杆,旋钮等部件。点击“输入/输出”选项卡,进入输入输出管理模块,输入输出管理模块见图11。该模块界面左侧为可用的域的列表,默认情况下,软件会提供4个域,用户可以根据需要点击“添加域”按钮进行添加。界面右边会显示检测到的插件的信息,及该插件的输入、输出和反馈线路信息。在界面左侧的域列表中选择一个域,再在右侧的插件列表中对该域的输入、输出及反馈线路进行配接,每个域一次只可以配接一条输入、一条输出和一条反馈线路,被选中的插件的信息会在界面右下角进行显示。
完成各个模块的单元测试后,在演播厅对整个舞台视效联动控制系统进行实地测试,测试结果表明,该系统可以实现舞台视效联动控制的功能。
节选自《演艺科技》2020年第3期白石磊,锁意涵,徐 开,吴智勇,范绪威,庄 畅《舞台视效联动控制系统软件设计与实现》,转载请标注:演艺科技传媒。更多详细内容请参阅《演艺科技》。
(本文仅用于行业交流学习,并不用于商业用途。文中观点为作者独立观点。如不慎侵涉第三方权益,请与我们联络,我们将第一时间删除处理。)