我在尝试将 zexy 和 iemlib 加载到 Pd Vanilla 0.46-7 中时遇到一些问题。我从 https://github.com/electrickery/pd-cyclone 编译和安装 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 所以我无法加载它的对象。
我还尝试在启动首选项下加载 lib“zexy/zexy”,它加载正常,但随后我收到如下消息:
warning: class 'abs~' overwritten; old one renamed 'abs~_aliased'
而且我似乎失去了命名空间功能,我无法再引用 [zexy/多路复用] 并且只需要使用 [多路复用],我认为这是正确的行为。
Pd 如何知道如何在不同名称的文件上查找对象?
有什么建议吗?
此线程被标记为已解决 http://forum.pdpatchrepo.info/topic/9677/having-trouble-with-deken-plugin-and-zexy-library-solved听起来像是一个类似的问题,但我没有成功。
最佳答案
zexy
是作为多对象库构建的,因此 zexy/Multiplex
没有单独的二进制文件。
正如您正确猜测的那样,加载 zexy 的正确方法是一个整体(在补丁中使用 [declare -lib zexy]
或将 zexy
添加到启动库(不需要使用zexy/zexy
)),并忽略有关abs~的警告。
至于加载是如何工作的:
- Pd 维护一个它知道如何创建的对象列表。例如每当您创建
[pack]
时,Pd都会在其已知对象列表中查找pack,并使用在那里找到的信息来实际创建对象。 - 如果您尝试创建 Pd 还不知道的对象(例如
[foo]
),那么 Pd 将查找名为 foo 的库(例如:foo.pd_linux
),如果找到,它将“加载”它。 - 加载一个库意味着它将调用库中的一个特殊函数(这个特殊函数是库的入口点,在我们的代码中称为
foo_setup()
)案例) - 之后,Pd 将检查已知对象列表中是否现在有
foo
。如果是,它将创建该对象。
现在,魔法在特殊函数中完成,当 Pd 加载库时调用该函数:该函数的主要目的是告诉 Pd 有关新对象的信息(基本上是说:“如果有人请求对象“foo”,我可以做一个,或者你也可以”)。
当zexy的特殊函数被加载时,它会告诉Pd所有zexy对象(包括多路复用
),因此Pd加载zexy后,它知道如何创建[多路复用]
对象。
如果特殊函数注册了一个 Pd 已经知道的对象(例如,在 zexy 的情况下,它会尝试注册一个新对象 abs~
,即使 Pd 已经拥有同名的内置对象),然后 Pd 将通过附加 _aliased 来重命名原始对象,并且新注册的对象将接管该名称。
关于puredata - 如何在 Pure Data 0.46-7 (Mac) 中正确加载外部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35588376/