2

我在尝试将 zexy 和 iemlib 加载到 Pd Vanilla 0.46-7 时遇到了一些麻烦。我从https://github.com/electrickery/pd-cyclone编译和安装旋风没有问题。它工作正常。所以我尝试使用他们的二进制文件从https://github.com/iem-projects/pd-iem安装 iemlib 和 zexy,但出现了问题。当我在路径首选项下打开“详细”时,PD 似乎正在寻找与我尝试使用的对象同名的文件。在补丁中使用 [zexy/multiplex] 给出:

tried ~/Library/Pd/zexy/multiplex.d_fat and failed
tried ~/Library/Pd/zexy/multiplex.pd_darwin and failed
tried ~/Library/Pd/zexy/multiplex/multiplex.d_fat and failed

但是没有multiplex.d_fat,只有zexy.d_fat。与iemlib 相同,没有dollarg.d_fat 或dollarg.pd_darwin 只有iem_mp3.d_fat、iem_t3_lib.d_fat、iemlib1.d_fat 和iemlib2.d_fat。我猜这些文件是编译外部文件的地方。

我尝试使用 deken 和 iemlib 安装 .pd_darwin 文件,但我想这是一个旧版本(?)和 zexy 仍在安装 zexy.d_fat 所以我无法加载它的对象。

我还尝试在启动首选项下加载库“zexy/zexy”,它加载正常,但随后我收到如下消息:

warning: class 'abs~' overwritten; old one renamed 'abs~_aliased'

而且我似乎失去了命名空间功能,我不能再引用 [zexy/multiplex] 并且只需要使用 [multiplex],我猜这是正确的行为。

Pd 如何知道如何在具有不同名称的文件上查找对象?

有什么建议吗?

该线程被标记为已解决http://forum.pdpatchrepo.info/topic/9677/having-trouble-with-deken-plugin-and-zexy-library-solved听起来像一个类似的问题,但我没有成功.

4

1 回答 1

3

zexy构建为多对象库,因此没有单独的二进制文件用于zexy/multiplex. 正如您正确猜测的那样,加载 zexy 的正确方法是整体([declare -lib zexy]在您的补丁中使用或添加zexy到启动库(无需使用zexy/zexy)),并忽略有关abs~的警告。

至于加载是如何工作的:

  • Pd 维护一个它知道如何创建的对象列表。例如,每当您创建时[pack],Pd 都会在其已知对象列表中查找,并使用在那里找到的信息来实际创建对象。
  • 如果你试图创建一个 Pd 还不知道的对象(例如[foo]),那么 Pd 将寻找一个名为foo的库(例如:) foo.pd_linux,如果找到,它将“加载”它。
  • 加载一个库意味着它将调用库中的一个特殊函数(这个特殊函数是库的入口点,foo_setup()在我们的例子中被调用)
  • 之后,Pd 将检查它现在是否foo在已知对象列表中。如果是这样,它将创建对象。

现在魔术在特殊函数中完成了,它在 Pd加载库时调用:这个函数的主要目的是告诉 Pd 新对象(基本上是说:“如果有人要求对象“foo”,我可以做一个或者你”)。当 zexy 的特殊函数被加载时,它会告诉 Pd所有的 zexy 对象(包括multiplex),所以在 Pd 加载完 zexy 之后,它就知道如何创建[multiplex]对象了。

如果特殊函数注册了一个 Pd已经abs~知道的对象(例如,在 zexy 的情况下,即使 Pd 已经有一个同名的内置对象,它也会尝试注册一个新对象),那么 Pd 将通过以下方式重命名原始对象追加_aliased和新注册的对象将接管名称。

于 2016-03-05T21:58:52.377 回答