15个版本
0.4.3 | 2024年7月6日 |
---|---|
0.4.2 | 2024年2月2日 |
0.4.1 | 2023年9月24日 |
0.3.6 | 2023年1月17日 |
0.2.3 | 2022年10月14日 |
#107 在 音频
用于 midilink
5MB
92K SLoC
包含(晦涩的autoconf代码,7KB) configure.ac
rusty_link
rusty_link
是通过官方C 11包装器扩展 abl_link 为Ableton Link提供的Rust包装器。这个库在复制abl_link的功能的同时,尽可能保持无偏见和平凡,并提供了Rust的一些安全保证。
Ableton Link 是一种技术,可以在一个或多个设备上运行的多个应用程序之间同步音乐节拍、节奏、相位和开始/停止命令。连接到本地网络上的设备上的应用程序可以自动发现彼此,并形成一个音乐会议,每个参与者都可以独立表演:任何人都可以开始或停止,同时仍然保持节奏。任何人都可以改变节奏,其他人会跟随。任何人都可以加入或离开,而不会破坏会议。
变更日志
可以在项目的GitHub页面这里查看发布说明。
示例
要运行示例,请克隆此仓库并进入其目录。然后通过初始化git子模块来获取Ableton Link源代码:
git submodule update --init --recursive
link_hut_silent:Ableton的简单 'LinkHut' 示例的Rust移植,没有声音。要运行它
cargo run --release --example link_hut_silent
link_hut:Ableton的更复杂 'LinkHut' 示例的Rust移植,包含声音。这样运行它
cargo run --release --example link_hut
如需ASIO和Jack支持,请参阅cpal文档。
需求
需要安装并可在终端中使用最新版本的CMake(3.14或更高版本)。使用 cmake --version
进行测试。
Linux可能需要安装一些额外的系统库以进行C编译,具体取决于您的发行版,例如 build-essential
、libclang-dev
或 libasound2-dev
和 pkg-config
用于示例等...
线程和实时安全性
在 'abl_link.h' 的某些函数中,有关于线程和实时安全性的文档注释。这些注释已被复制到本库的函数中。以下是对其含义的简要说明:
-
线程安全性:线程安全的代码仅以确保所有线程都按预期行为并满足其设计规范的方式操作共享数据结构,而不会产生意外的交互。
-
实时安全性:这些函数可以在实时环境中调用,而不会阻塞线程。例如,音频线程/回调。
实现
rusty_link
目前封装了 'abl_link.h' 中所有可用的函数,并将它们作为AblLink
或SessionState
结构体的方法公开,除了析构函数,这些析构函数是在 Drop 特性上实现的。- AblLink 的一个实例可以被认为是一个具有内部可变性的对象。所有函数都保证了线程安全性,除了会话状态捕获/提交,这些操作在 C++ 端使用内部 Mutex。更多详情请查看函数文档注释和官方 Link 文档。
- 包括 C++ 的 HostTimeFilter 的 Rust 版本,该版本可用于音频回调中,以将主时钟与样本时钟对齐。
- 已添加删除函数,用于删除之前设置的
num_peers
、start_stop
和tempo
回调。
测试
Ableton 设计了一个 测试计划 来测试您的项目中的 Ableton Link 实现是否满足所有预期要求。
测试过的平台
rusty_link
本身在所有主要平台上都工作正常。我只是在 Linux 上的带有声音的示例中遇到了麻烦。这可能是我没有正确使用 cpal
的错吗?!任何这方面的帮助都将受到欢迎 😘。无论如何,这不应该阻止任何人将其库用于自己的项目。祝您玩得开心!
MacOS M1 | Win 11 WASAPI | Ubuntu 22 on Pi4 | |
---|---|---|---|
构建 rusty_link |
✓ | ✓ | ✓ |
示例:link_hut_silent |
✓ | ✓ | ✓ |
示例:link_hut |
✓ | ✓ | cpal/ALSA 问题?! |
反馈
我不是专业的开发者,只是把它当作一个爱好来做,因此欢迎任何关于更新和纠正我的工作的帮助。
许可证
Ableton Link 是在 GPLv2+ 和专有 许可证 下双授权的。
这意味着 rusty_link
也必须在 GPLv2+ 下。
如果您想将 Link 集成到专有软件应用程序中,请联系 Ableton,邮箱为 [email protected]。
鸣谢
感谢 Magnus Herold 的 实现。我创建这个库是为了了解 Rust 中的 FFI,我最初是作为他的分支开始的,但后来转向使用 Ableton 的官方 C 封装。
一些用于分割闭包的代码是从 ffi_helpers 借用的,并进行了功能上的修改。感谢 Michael F Bryan 的工作。拉取请求 已提交给 ffi_helpers...