我如何使用开源工具构建剧院照明系统

开源软件是本地《悲惨世界》演出的明星。
413 位读者喜欢这个。
open source button on keyboard

Opensource.com

我们为家人所做的事情,嗯? 有时我想知道我为什么要这样做,这已经不是我的完美主义第一次导致我做的工作远超任务最初的要求。

我的岳父大约在一年前找到我,因为他所在的教堂正在上演《悲惨世界》。 为了让它比前一年更大更好,他购买了一些灯光和一个灯光控制台,并希望我能操作它们。“当然!” 我说。“这有多难?” 然后他描述了他对其中一个场景的设想:一场大型战斗,灯光闪烁; 你知道,真的很刺激! “酷,”我说,并在不知不觉中同意了。

我第一次坐下来操作他购买的灯光控制台:一个小型、低端、多通道 DMX-512。 它有能力容纳数百个场景、淡入淡出,甚至还有一个不错的慢速转轮。 我很兴奋! 尽管手册显然翻译得很差,而且控制台需要按下一连串按钮才能做一些事情,但我还是坚持了下来。 我创建了一个类似战斗的场景,认为从我认为最困难的部分开始是明智的。 我给我的岳父看了看,看到了他失望的表情。“这只是一个测试,”我赶紧指出。“当然,真正的东西会看起来好得多。” 他走开了。 哎呀。

我开始思考场景的问题。 它不够随机……它需要看起来更随机。 我决定,如果我可以生成足够多的场景,让灯光在某些路径上移动,我就可以使用内置的推子在它们之间快速淡入淡出,一切都会好起来的。 对吧? 生成场景信息很难。 正是在那时,我在这项工作中使用了我的第一个开源工具: Blender

我使用 Blender 中的动画曲线在一个场景中玩灯光,并生成令人信服的战斗外观和感觉。 然后我写了一些 Python Blender 内部的脚本将动作导出到 CSV,为我提供每个场景的列数据,然后我可以将其编程到控制台中。 我终于感觉我有所进展了。

如果不是因为仅仅编程这东西就足以引起压力(除了我给自己造成重复性劳损的感觉),并且一个滑块应该控制 0.2 秒到 30 秒的时间(我的意思是真的吗?!),结果就不那么理想了。 它看起来就是不对劲。 叹息。 我想,如果我能完全控制它就好了。 如果我可以用 Python 编程这些灯就好了。

我的思绪飘忽不定,一个家伙躺在沙滩上的躺椅上用 Python 编程他的 DMX-512 照明的景象浮现在脑海中。“他看起来真幸福,”我想。 我必须拥有他所拥有的。

我和我的姐夫聊了聊,他也是一位技术爱好者,我还要补充一点,他已经承担了混音的工作。 我们认为购买 USB DMX-512 接口是一项值得的投资。 我们买了一个,大概是控制台成本的一半,我开始探索在 Linux 上控制 DMX-512 的选项。 我找到了一些应用程序,但它们中的大多数似乎从一开始就基于静态场景。 我也有一种隐隐约约的感觉,这个项目会扩展、发展并遭受范围蔓延。

找不到任何应用程序可以满足我对我的操作系统上的可用性或功能的需求,我决定自己编写一个。 我找到了开放照明架构 (OLA),在对黑名单模块进行了一些调整后,我得到了一个很小的 Python 脚本,它可以将数据发送到灯光并打开和关闭它们。 我欣喜若狂。 现在我只需要编写一个完整的系统来实现梦想。

我从小处着手,考虑什么是绝对必要的。 我想要一种通用的格式来存储场景。 灯光控制台让我困扰的一件事是缺乏备份。 如果控制台出现故障,我所有珍贵的场景都可能被清除。 数小时的潜在工作被浪费了。 不。 这不是一个选项。 我选择了开放格式 YAML 用于我的场景。 我在日常工作中经常使用它,它似乎很适合。

很快我就能够以一种理智的方式在两个场景之间淡入淡出,在每个灯光的每个通道值之间进行插值。 这意味着,如果灯光 1 上的亮度通道在场景 1 中为 50%,在场景 2 中为 75%,则软件会在指定的时间段内从一个线性斜坡到另一个。 优秀!

然后我开始向通道添加修改器。 这是我在 Blender 中看到的东西。 数据的动画通道(手臂骨骼弯曲、相机 x 轴平移)可以有关键帧,但它们也可以应用修改器来生成噪声或其他效果。 我向我的项目添加了一些基本的修改器,很快我就有了 cos/sin,使灯光上的倾斜/平移通道呈圆形运动。 然后,我使用样条曲线添加了航点修改器,使通道能够在不同时间点平稳地转到不同的值。 一切都在稳步进展。

不在教堂时处理灯光很有挑战性。 很难可视化场景的外观,所以我再次求助于 Blender,向应用程序添加了一个简单的 HTTP API,并要求 Blender 例行查询和更新我在场景中设置的灯光。 这使我能够演示我的照明并查看发生了什么。

早期可视化演示

舞台上增加了一台烟雾机。“你能用你的东西控制它吗?” 有人问我。“是的,我想,”我回答。 由于非常简洁和极简的 UI,只有场景控件,没有灯光的通道推子。 因此,控制烟雾意味着将一些值烘焙到场景中。 烟雾不仅是一种非免费商品,而且表演者往往在你以测试的名义用烟雾淹没他们时会感到非常沮丧。 我可以使用其中一个航点修改器,但并不真的希望每次我进入该场景时都触发它。

我需要另一种控制它的方法。 我的思绪飘忽不定。“如果我可以使用 WiiMote 来做到这一点,那不是很好吗?” 然后我突然想到。“我为什么不能呢?” 我转向了 cwiid 库,拿起一个在休息室里闲置的 WiiMote 控制器,并充分利用它。 很快,烟雾机通道就有一个 WiiMote 修改器,允许我抬起控制器,用浓浓的烟雾笼罩表演者。

控制器的音调与灯光 1、2、3、4 的整体亮度相关。控制器的滚动与灯光 1、4 上的蓝色量以及灯光 2 和 4 上的倾斜度相关。

被冲昏头脑,我添加了动态 GTK 从 YAML 配置生成通道滑块的 UI,这意味着我可以切换到不同的通道并覆盖它们。 我这样做是件好事,因为表演者似乎从来没有每天晚上都使用相同的麦克风。 吸取教训。 现在我可以对这些变化做出反应,手动升降灯光,就像使用控制台一样。

三场演出来了又走了。 充满 sin/cos 和新的随机修改器的战斗场景看起来很壮观。 加上我的姐夫组合在一起的音频,我们感觉很不错。

战斗场景演示

快进到一年后。 我明天要进行一场演出,我的姐夫刚刚问我,“有没有办法让你的系统播放声音,这样我们就不必一起触发它们了?” “当然,”我回答。 现在它可以了,多亏了 GStreamer。 它还可以根据波的幅度控制通道,这为我提供了一种将战斗场景中的爆炸与灯光移动同步的方法。 谢谢, SciPy

那么这里的要点是什么? 如果没有开源,我永远、永远无法完成这个项目。 我将不得不编写或购买 WiiMote 驱动程序、DMX-512 驱动程序、DMX 路由和控制后端、可视化软件、配置标准、UI 生成。 开源给了我三样东西,这三样东西都是非常宝贵的。

  1. 它让我可以访问所有这些东西,以便我可以专注于编写将它们组合在一起的粘合剂。
  2. 它让我能够不断更新和添加到我的弗兰肯项目中,毫无疑问,有一天我会重写并发布它。
  3. 它让我的岳父高兴......目前是这样。

如果没有开源,我就会陷入语无伦次的、重复性劳损的混乱状态,嘟囔着关于需要按住场景按钮三秒钟,然后再按程序按钮和清除按钮的组合。

我认为开源只是拯救了我的生命,并在它这样做的时候给了我一次非常棒的体验。

标签
User profile image.
Peter 是一位充满热情的开源爱好者,在过去的 10 年里一直在推广和使用开源产品。 他曾在许多不同的领域做过志愿者,从 Ubuntu 社区开始,然后转向音频制作领域,后来又转向写作。

2 条评论

作为一名音响和灯光技术人员,以及一名(相对新手)linux 用户,我发现这篇文章非常有趣,我当然可以理解编程某些灯光控制台的挫败感。

我假设您购买的 DMX 适配器也具有 DMX 输入? 在我看来,完全省略硬件灯光控制台是一种浪费,因为它可以设置为一个简单的调光器通道组,允许物理推子为分配给它们的任何软件功能或修改器提供控制值输入。 这将提供“手动”操作,并消除对 wii 控制器的需求,因为烟雾可以简单地通过推子控制(或覆盖)。

我曾考虑做类似的事情,为 Martin M-PC 灯光软件提供更多的物理控制,因为我们的 Martin 控制界面只有少数几个推子,而我们还有另一个有 48 个推子的灯光控制台,但可编程性有限。

MIDI 控制器也可以工作。

祝您的项目好运。 如果您打算发布您的项目,我建议您使用一个好的 GUI,因为您的普通灯光技术人员可能不懂编码。

是的,所以我们在有限的预算、短时间内有限的可用性和似乎最兼容的情况下购买的控制器,只有 DMX 输出。 完全同意我们可以使用输入,而且这确实可能是未来的一个很棒的想法,利用类似于 MIDI 学习的技术,我们只需右键单击屏幕上的推子,单击学习,移动控制面板上的推子,然后将其映射到该推子。

然后它也可以用于允许控制面板上的同一个推子控制多个通道,从而允许廉价的帮派。(将推子分组到组实际上是我将在新版本中添加的内容,使能够将推子分组并让它们全部由单个推子控制,该推子将出现在侧面或新页面上。

正如我所说,一旦我添加了 GUI 来控制事物,Wii 控制就变得多余了,并且是一个很酷的玩具。 你看透了我的心思,MIDI 修改器也是我想添加的东西之一。

使用该工具无需编码,灯光格式虽然冗长,但易于使用,一个例子在这里, https://github.com/cbx33/lesmisdata/blob/master/lesmis.yaml

然而,为它制作一个好的 GUI 是我一直想做的事情,在 UI 中设置常量、将修改器应用于通道、创建场景甚至实时查看通道数据图也是计划中的事情。 但是在我这样做之前,完全重写修改器系统将是必要的。 它仍然有一些我不喜欢的地方;)

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.