0

我有兴趣将另一种音频编程语言 ( ChucK ) 中的语言集成到我的 Delphi 项目中。我知道动态链接库(.DLLs)也许可以做到这一点,但我对此并不熟悉。

有谁知道我如何配置项目以使两种语言一起工作?

4

2 回答 2

3

快速浏览一下ChucK 文档,我们发现了三种可能的方法,所有这些都源于这样一个事实,即 ChuckK 既是一种语言,也是一种虚拟机 (VM),用于运行用该语言编写的程序。

ChuckK 是开源的,因此该 VM 的完整源代码是可用的,但它是用 C++ 编写的。ChucK 可以以这种源代码形式提供,也可以作为支持平台的可立即运行的可执行文件提供。

我找不到在其他程序中使用的任何 DLL 版本的 VM 的引用。这并不是说这样的 DLL 不是由其他人开发的,只是我找不到对它的任何引用,而且它似乎不是 ChuckK 本身标准分发的一部分。

我确实找到了一些在 ChucK 的上下文中引用 DLL 的源代码,但我并不完全清楚这是用于使用 ChucK 的 DLL API 还是实现的一部分,从而允许 ChucK 本身通过 DLL 进行模块化或扩展。

我在您之前看到的三个选项是:

  1. 将 Chuck VM 移植到 Delphi。也就是说,将所有的 Chuck VM 源代码翻译成 Delphi。这将为您提供一个完全在 Delphi 中实现的 ChuckK 版本,它能够运行 ChuckK 程序。

  2. 在 C++ 中为现有的 ChucK VM 源代码实现一个 DLL API(可能基于或从上面的链接开始),使您能够通过调用该 DLL 来运行 ChucK 程序,以由现有的 ChucK 的 C++ 实现运行。

  3. 使用 ShellExecute()、WinExec() 或 CreateProcess() 等使用 ChucK exe 运行 ChucK 程序,就像您希望从 Delphi 程序运行任何其他外部程序一样。

这些大致按难度降序排列。也就是说,Delphi(选项 1)的完整端口可能超出您的能力范围。

根据您的 C++ 和 Windows 开发技能,围绕现有 C++ 代码(选项 2)实现 DLL 接口是可能的。

调用外部程序(选项 3)相对简单。

哪种方法适合您,取决于您的任务性质、目标以及您在相关领域的信心/技能。

祝你好运。

于 2015-06-04T04:42:35.957 回答
0

让不同系统相互通信的一种简单方法是使用开放式声音控制 (OSC)。ChucK 内置了OSC 接收器和发送器(搜索“> OSC”),Delphi看起来也实现了 OSC。

OSC 在网络上工作,但您也可以只将消息发送到您自己的本地计算机 (localhost)。上面引用的 Chuck 示例执行此操作。

这不是一个紧密的集成,但它会让 Delphi-ChucK 的关系继续下去。

于 2015-08-05T17:50:25.993 回答