舞臺視效聯(lián)動控制系統(tǒng)旨在實現(xiàn)一個集成化、一體化的綜合控制臺,該控制臺可以實現(xiàn)對舞臺燈光的控制及多路、多格式媒資內(nèi)容的播放控制。因此,在功能上,主要有以下需求:可以預先編排燈具的動作及所要播放的媒資內(nèi)容的播放順序,在表演時可以準確控制燈具,從而實現(xiàn)燈具的調(diào)光、變色、旋轉(zhuǎn)等功能,同時能夠?qū)崿F(xiàn)對所要播放的媒資內(nèi)容的編輯、播放/暫停及播放速度的控制。此外,在可用性上,要實現(xiàn)界面的簡單友好,所見即所得,用戶可以通過該系統(tǒng)實現(xiàn)對舞臺燈光與視頻設(shè)備方便快捷的控制。
1舞臺視效聯(lián)動控制系統(tǒng)總體設(shè)計
1.1 系統(tǒng)硬件設(shè)計
舞臺視效聯(lián)動控制系統(tǒng)的硬件整體,可以劃分為前面板和主控模塊兩部分,系統(tǒng)硬件結(jié)構(gòu)圖見圖1。其中,前面板主要負責搜集和發(fā)送鍵盤數(shù)據(jù),主控模塊為系統(tǒng)的核心部分,主要負責邏輯運算的處理以及對視效設(shè)備的控制,主控模塊通過RS485總線與前面板進行通信。系統(tǒng)主控模塊采用PC級別的主板,并結(jié)合FirePro W7000專業(yè)顯卡,通過內(nèi)置輸出板卡來實現(xiàn)不同形式的信號的輸出,通過DMX接口輸出DMX控制信號,實現(xiàn)對燈光的控制,通過DVI接口或DP1.4接口輸出視頻信號到投影機或者LED屏等顯示設(shè)備,實現(xiàn)對視頻的控制。
1.2 軟件總體設(shè)計
舞臺視效聯(lián)動控制系統(tǒng)軟件采用分層的設(shè)計思路,將系統(tǒng)軟件劃分為界面層和核心層,各層之間分別獨立設(shè)計,通過調(diào)用接口函數(shù)實現(xiàn)層與層之間的數(shù)據(jù)交換。在劃分層次的基礎(chǔ)上,分別對各層進行功能模塊劃分,軟件總體架構(gòu)圖見圖2。
1.3 軟件核心層設(shè)計
舞臺視效聯(lián)動控制系統(tǒng)需要實現(xiàn)對常規(guī)燈與電腦燈的控制,而電腦燈的種類多種多樣,每種燈具所實現(xiàn)的功能也各不相同,為了實現(xiàn)對電腦燈的控制,系統(tǒng)應該具備支持用戶添加自定義燈庫文件的功能,該功能由燈庫配置模塊實現(xiàn)。所謂燈庫文件,是對一個燈具的描述,該系統(tǒng)采用XML語言對設(shè)備進行描述。
對燈庫文件進行加載與保存操作時,需要對XML文件進行解析,采用QXmlStreamReader類和QXmlStreamWriter類進行解析,相比較Qt的SAX解析器,這種方式速度更快、更方便。
由于系統(tǒng)中通常需要保存數(shù)量龐大的燈庫文件,為了提高程序的運行效率及用戶的使用體驗,避免一些不必要的性能開銷,燈庫配置模塊采用延遲加載的方式,在對象創(chuàng)建時,僅將燈庫文件的路徑存儲起來,并不對燈庫文件進行解析,直到真正使用該對象時才進行解析。解析之前,先檢測該燈庫文件是否加載完成,如果當前是第一次使用該對象,則會使用之前存儲的燈庫文件的路徑來完成燈庫文件的解析,完成以上過程才真正完成一個燈庫文件的加載。
燈光功能模塊主要負責實現(xiàn)單步場景、序列、內(nèi)置圖形等功能,視頻功能模塊則負責實現(xiàn)視頻的編輯與播放功能。其中,視頻的編輯功能主要有畫中畫、多路視頻拼接、字幕添加等功能。燈光功能及視頻功能具有常用的公共接口,這些接口主要負責實現(xiàn)功能ID的設(shè)置與獲取,功能的名稱、種類、運行時間、運行狀態(tài)的設(shè)置等。
數(shù)據(jù)管理模塊負責管理燈光控制信號的輸入與輸出,采用插件模式進行構(gòu)建,以支持多種燈光控制協(xié)議及數(shù)據(jù)傳輸方式。該模塊以Universe類為核心,提供可以安裝輸入輸出插件的接口,通過安裝需要的插件,完成對輸入和輸出接口的配置。所有的輸入輸出插件的加載與緩存均交由SVELCIOPluginCache類進行管理,通過load方法進行插件的加載,加載后通過InputPatch類與OutPatch類分別對輸入和輸出插件進行包裝,將包裝后的插件交由InputOutputMap類進行統(tǒng)一管理,根據(jù)每個插件的配置將其與相應的Universe對象進行綁定。數(shù)據(jù)管理模塊關(guān)系框圖見圖3。
任務調(diào)度模塊的核心目標是保證系統(tǒng)內(nèi)部運行的燈光功能及視頻功能能夠按照用戶設(shè)定的時間,準確實時地進行調(diào)度與執(zhí)行,同時,也允許用戶根據(jù)實際需要,隨時啟動和停止任務調(diào)度、調(diào)整燈光功能與視頻功能的執(zhí)行順序。
任務調(diào)度模塊,包括調(diào)度管理和調(diào)度執(zhí)行程序兩部分。調(diào)度管理負責為需要調(diào)度的對象提供工作空間,每一個燈光功能通常包含以下內(nèi)容:實現(xiàn)該功能要使用的燈具,燈具的配接信息,燈具各個通道的DMX值,以及該功能的運行時間。因此,核心層其他模塊中的實例對象均由調(diào)度管理部分進行統(tǒng)一管理,這為內(nèi)存對象的管理提供了很大的便利。調(diào)度執(zhí)行程序部分則負責實現(xiàn)實際的燈光功能與視頻功能的調(diào)度,包括功能的啟動、停止及調(diào)度。燈光功能與視頻功能遵循的調(diào)度流程大致相同,以燈光功能為例,其調(diào)度流程見圖4。
圖4 調(diào)度流程圖
首先創(chuàng)建一個功能對象,并進行運行時間、淡入淡出時間等屬性的設(shè)置,將屬性設(shè)置完畢后的對象添加到核心調(diào)度模塊的Doc對象中,交由Doc對象進行管理,使用start方法啟動功能對象舞臺控制系統(tǒng),并將其添加到調(diào)度執(zhí)行程序,交由調(diào)度執(zhí)行程序進行調(diào)度。每次調(diào)度時,調(diào)度執(zhí)行程序首先對功能隊列進行讀取,若該對象在功能隊列中有調(diào)用該對象的preRun方法,然后將其添加到運行隊列中,并進行通道DMX的目標值及淡入淡出時間的設(shè)置。當調(diào)度執(zhí)行程序從運行隊列中獲取到功能對象時舞臺控制系統(tǒng),會調(diào)用該功能對象的write接口,進行通道值及淡入時間的寫入,生成當前的通道值,并將該值輸出到數(shù)據(jù)管理模塊。當調(diào)度執(zhí)行程序發(fā)現(xiàn)該功能對象已經(jīng)運行結(jié)束時,會調(diào)用該對象的postRun方法,將設(shè)置了淡出時間的通道添加到調(diào)度執(zhí)行程序中。完成以上步驟以后,調(diào)度執(zhí)行程序會將該功能對象從運行隊列中移除。
1.4 軟件總體框架
基于簡單友好的原則,根據(jù)系統(tǒng)實現(xiàn)的功能,對系統(tǒng)軟件界面進行模塊劃分,系統(tǒng)軟件界面總體框架設(shè)計見圖5。每個模塊對應一個單獨的選項卡,用戶根據(jù)需求點擊相關(guān)的選項卡,即可進入相應的模塊進行操作。
2舞臺視效聯(lián)動控制軟件的應用測試
基于Windows操作系統(tǒng),在QtCreator下使用C++對軟件的各個模塊進行實現(xiàn),并采用基于QtTest的單體測試方法對軟件各部分進行單元測試,對各個模塊的各類成員函數(shù)分別進行測試。經(jīng)測試,各部分滿足設(shè)計要求,運行正常。軟件的主界面見圖6。
用戶可以點擊界面左側(cè)“打開文件”,從本地直接加載一個演出文件,在演出管理界面,點擊“播放”按鈕,即可運行。也可以新建一個空白的演出文件進行編輯。
點擊軟件主界面上方任意一個選項卡,將會進入對應的模塊。點擊“設(shè)備”選項卡,進入設(shè)備管理模塊,在該模塊可以對燈具進行添加、刪除、編輯等操作。該模塊界面的左側(cè)有一個列表,負責顯示當前工作區(qū)中的所有已經(jīng)配接的燈具信息。選擇燈具后,窗口右側(cè)會顯示所選燈具的詳細信息。點擊界面上方的“添加燈具”按鈕,將會彈出添加燈具對話框,在對話框左側(cè)會顯示所有可用的燈具制造商列表,每個燈具制造商欄下都包含一個或多個型號的燈具,單擊列表中一個燈具時,對話框右側(cè)將會顯示該燈具的通道及模式信息,選擇要使用的模式,并設(shè)置配接地址及配接數(shù)量,完成以上操作,點擊確認即可完成燈具的配接。
點擊“功能”選項卡,進入功能管理模塊,功能管理模塊見圖7,在該模塊可以進行功能的創(chuàng)建、刪除及編輯等操作。創(chuàng)建各種功能的按鈕位于該模塊界面上方,界面下方的功能列表用于顯示所有已經(jīng)創(chuàng)建的功能,每種功能都設(shè)置了獨立的項,每次創(chuàng)建的新功能都會出現(xiàn)在對應的類別下,創(chuàng)建新功能或者點擊已經(jīng)創(chuàng)建的功能時,界面會顯示該功能對應的編輯器,每種功能都有屬于自己的編輯器,在編輯器中所做的更改都會被立即存儲到對應的功能中,不需要進行額外的確認操作。
以視頻編輯器為例,點擊視頻編輯器中的“畫中畫”按鈕,可以在當前視頻播放窗口再打開一個文件進行播放,所實現(xiàn)的畫中畫效果見圖8。點擊視頻編輯器中的“視頻疊加”按鈕,將彈出視頻疊加界面,視頻拼接效果見圖9,最多可輸入9路視頻進行拼接,可自定義拼接方式與拼接畫面大小,設(shè)定好文件輸出路徑,執(zhí)行視頻拼接指令即可完成多路視頻的拼接操作。此外,用戶可以將編輯完成的燈光功能或者視頻功能,與界面下方的推桿進行配接,也可根據(jù)需要在“模擬控臺”界面添加按鈕、旋鈕等部件與功能進行配接,在演出時直接使用推桿、旋鈕、按鈕即可快速運行相應的功能。
點擊“Show”選項卡,進入演出管理模塊,演出管理模塊見圖10。演出管理模塊界面以多軌道的形式呈現(xiàn),這是視頻編輯軟件的典型視圖,用戶可以根據(jù)燈光功能或視頻功能開始運行的時間,將功能放置在時間軸指定的位置。燈光功能與視頻功能基于相同的時間軸,可以很好地實現(xiàn)對燈光設(shè)備與視頻設(shè)備的協(xié)同控制。
點擊“模擬控臺”選項卡,進入模擬控臺管理模塊,用戶可以根據(jù)需要添加按鈕,推桿,旋鈕等部件。點擊“輸入/輸出”選項卡,進入輸入輸出管理模塊,輸入輸出管理模塊見圖11。該模塊界面左側(cè)為可用的域的列表,默認情況下,軟件會提供4個域,用戶可以根據(jù)需要點擊“添加域”按鈕進行添加。界面右邊會顯示檢測到的插件的信息,及該插件的輸入、輸出和反饋線路信息。在界面左側(cè)的域列表中選擇一個域,再在右側(cè)的插件列表中對該域的輸入、輸出及反饋線路進行配接,每個域一次只可以配接一條輸入、一條輸出和一條反饋線路,被選中的插件的信息會在界面右下角進行顯示。
完成各個模塊的單元測試后,在演播廳對整個舞臺視效聯(lián)動控制系統(tǒng)進行實地測試,測試結(jié)果表明,該系統(tǒng)可以實現(xiàn)舞臺視效聯(lián)動控制的功能。
節(jié)選自《演藝科技》2020年第3期白石磊,鎖意涵,徐 開,吳智勇,范緒威,莊 暢《舞臺視效聯(lián)動控制系統(tǒng)軟件設(shè)計與實現(xiàn)》,轉(zhuǎn)載請標注:演藝科技傳媒。更多詳細內(nèi)容請參閱《演藝科技》。
(本文僅用于行業(yè)交流學習,并不用于商業(yè)用途。文中觀點為作者獨立觀點。如不慎侵涉第三方權(quán)益,請與我們聯(lián)絡(luò),我們將第一時間刪除處理。)