Linux 多媒体与 PD 和 GEM:用户报告

作者:Dave Phillips

作为一个多媒体平台,Linux 在过去几年中看到了惊人的增长。在系统层面,一个简单的内核补丁现在可以提高调度器效率,并将性能延迟降低到令人难以置信的 3 毫秒或更短,完全在专业音频和视频应用的可接受范围内。考虑到低延迟补丁(以及其他一些微调),我们现在可以考虑是否有能够利用这种增强功能的应用程序。

我目前正与行为艺术家 Chris Spradlin 合作进行一个多媒体演示,该演示结合了视频播放/处理、静止图像和视频投影,以及各种形式的音频捕获、播放和转换。控制不同媒体之间的相互作用是一个相当大的挑战,特别是由于我们希望在 Linux 中实时完成所有操作。幸运的是,我找到了一个出色的解决方案来解决我们的困境:Miller Puckette 的杰出作品 Pd。

从简单开始

Pd (pure data) 是一个音频合成/处理环境,类似于著名的 Max(及其 Java 后代 jMax)。这些环境采用了一种巧妙的方案,以图形方式将各种简单组件(例如信号发生器/修改器及其控制对象)拼接到复杂的音频网络中。

Linux Multimedia with PD and GEM: a User's Report

图 1. 一个简单的 Pd Patch

图 1 展示了 Pd 的基本原理:osc~ 信号发生器创建一个音频波形(余弦波),滑块控制波形的频率(音调),而 dbtorms 对象周围的网络修改生成信号的幅度(音量)。最后,修改后的信号被发送到 dac~ 对象(数字到模拟转换器),并通过音频系统听到结果。

Pd 包括各种现成的对象,用于信号生成和处理,如果这种合成拼接是 Pd 所能做的全部,它仍然会是一个令人印象深刻的音频环境。然而,由于 Mark Danks 出色的基于 OpenGL 的图形库 GEM,Pd 还可以实时操作视频和图像参数。Pd 的灵活性允许在其音频和视频流之间进行任意连接和控制,从而为控制和协调多媒体演示创建了一个强大的环境。

为了将 Pd 与 GEM 一起使用,您必须通过 $HOME/.pdrc 文件或使用类似于以下的命令字符串来调用它

pd -rt -lib /home/dlphilp/gem-0.87_2/Gem

-rt 选项将 Pd 的性能优先级设置为实时状态。当与低延迟内核结合使用时,Pd 的性能对于现场表演和其他实时情况来说是相当可以接受的。当您使用 GEM 库运行 Pd 时,您会希望获得尽可能多的帮助;内核延迟补丁是天赐之物,但您仍然需要硬件加速的 OpenGL 安装才能最好地利用 GEM。

注意:本文的测试系统包括一个 800MHz Duron CPU、256MB RAM 和一块 Voodoo3 AGP 显卡。Linux 内核版本为 2.4.5,已打上低延迟补丁;视频子系统为 XFree86 4.0.1。GEM 中的某些操作非常占用 CPU 资源,我认为 Voodoo3 是 Pd/GEM 联盟可接受的显卡低端产品。音频系统包括一块在 ALSA 0.9.0beta10 驱动程序下运行的 Sound Blaster Live! 声卡。另请注意,使用了 Pd 版本 0.34-4(稳定版)以及 IOhannes Zmoelnig 的 GEM 0.87 beta 版本。早期版本的 GEM 不包括此处描述的实时视频操作所需的 pix_movie 和 pix_film 对象的 Linux 版本。

Linux Multimedia with PD and GEM: a User's Report

图 2. 一个简单的 Pd/GEM Patch

在图 2 中,我们看到了利用 GEM 库函数的简单 Pd patch 的基本结构。请注意,所有其他 GEM 相关操作都需要 gemwin 和 gemhead 对象。此 patch 提供了加载电影(在本例中为 anim-3.mov)并在将其渲染到立方体表面时播放它的机制。立方体大小由滑块移动控制,电影可以通过单击较小的 Bang 按钮(两个青色框之一)来启动和停止。图 3-5 展示了这个 patch 的运行情况。第一张快照(图 3)说明了最简单的渲染,立方体的一个面被显示并扩展以适应大部分渲染窗口。图 4 显示了 rotate 对象如何操作立方体,图 5 显示了当滑块值超过渲染窗口大小时发生的奇怪效果。当然,静止图像无法传达电影在动画立方体表面上播放的效果,但请相信我,这非常酷。

Linux Multimedia with PD and GEM: a User's Report

图 3. 默认视频显示

Linux Multimedia with PD and GEM: a User's Report

图 4. 立方体上的视频

Linux Multimedia with PD and GEM: a User's Report

图 5. 爆炸视频显示

到复杂

现在让我们看看组合我们两个示例 patch 的可能性。使用简单的剪切/复制/粘贴编辑,我们可以轻松地将一个 patch 的内容复制到另一个 patch 中,并开始获得一些真正的乐趣。Pd 真正实现了其名称的承诺:数据在这里纯粹是数据,任何数据流都可以路由到 patch 中的任何位置(有一些限制),我们可以轻松地建立一个系统,其中一组控制器同时控制音频和视频参数。

Linux Multimedia with PD and GEM: a User's Report

图 6. 一个复杂的 Pd/GEM Patch

图 6 说明了我们复杂的组合音频/视频 patch。正如您所看到的,两个滑块都同时控制视频的一个方面以及音频的一个方面。调整音频幅度会导致立方体大小的调整,而移动音频频率控制的滑块也会使立方体在其 x/y 轴上旋转。多媒体艺术家将在 Pd 对这种任意附件和对应关系的支持中发现巨大的可能性。我还应该注意到,GEM 包括许多其他令人着迷的基于像素的效果(例如颜色卷积和像素阈值控制),但我将其探索留给感兴趣的读者。

项目评估

基于此处显示的示例,我们目前正在为双人展规划我们的演示。我们希望使用不超过两台 Linux 驱动的笔记本电脑(理想情况下我们只需要一台)和各种外部设备(录像机/播放器、静止图像投影仪、照明显示器等)。运输的便利性是一个问题,因为我们希望能够用一辆车将展览带到路上。

我们的 Pd 音频探索在性能方面非常稳定,这是一个好消息,因为我们计划在整个作品中使用 Pd 的实时音频处理。GEM 0.87_2 有时会使 Pd 崩溃,但我在撰写本文时使用的是 beta 版本。IOhannes Zmoelnig 致力于 GEM 的改进,因此我们可以合理地期望在我们准备好进行首次演出(目标是在 2002 年底)时获得完美的性能。我们还看到,结合繁重的音频和视频处理会产生对更强大硬件的需求,而这超出了我们目前使用的范围。我希望通过添加 GeForce3 显卡来改善我们的视频状况。最后,我们还打算使用 Pd 的 shoutcast~/oggcast~ 对象通过互联网直播我们的演出。

结论

Pd 非常容易使用,允许快速构建相对复杂的 patch。此处显示的示例仅设计为学习工具和概念验证演示,我已经为我们的项目创建了更复杂的 patch。本文仅浅显地指出了 Pd 和 GEM 的可能性,我鼓励所有基于 Linux 的音频和视频艺术家参与到这个软件中来。

致谢

非常感谢 Miller Puckette 和 Mark Danks 创建并免费分发 Pd 和 GEM。还要感谢 Pd 社区对这个永久的新手的持续帮助,特别是感谢 IEM 的 IOhannes Zmoelnig 为我提供的 GEM 0.87 beta 版本,以及在他帮助我更多地了解 GEM 的视频对象时给予的不懈帮助。最后,还要非常感谢 Guenter Geiger 在 pix_movie 对象的初步工作以及他对 Pd 和 GEM 的 Linux 版本的许多其他贡献。

资源

Linux Multimedia with PD and GEM: a User's Report

Dave Phillips 是一位音乐家、教师和作家,居住在俄亥俄州芬德利。自 1995 年首次接触 Linux 以来,他一直是 Linux 音频社区的活跃成员。他是《The Book of Linux Music & Sound》的作者,以及Linux Journal 的许多文章的作者。

加载 Disqus 评论