#midi #sf2 #tiny-sound-font #sound-font2

sys tsf-sys

为SoundFont2文件软件合成器TinySoundFont提供的不安全绑定

3个不稳定版本

0.2.0 2021年9月17日
0.1.1 2021年8月22日
0.1.0 2021年7月26日

#902音频


tsf 中使用

无许可证

26KB
96

tsf-sys — 最新版本

TinySoundFont提供的不安全Rust绑定。不要直接使用此crate,而是使用具有更多用户友好绑定的tsf

构建要求

遗憾的是,这个库包含一些非标准的构建要求,因为它同时使用了ccbindgen。这意味着即使这只是依赖项(或依赖项的依赖项...),您也需要进行一些额外的设置。

cc

我们使用CC来构建随此crate捆绑的C库。这意味着您需要安装C编译器。特别是,当针对目标三元组(使用cargo build --target x-y-z)进行构建时,您需要该目标工具链的C编译器(即运行在主机上,编译到目标的C编译器)。您还需要目标归档器。

实际上,这意味着

  • 在没有目标(或与主机相同的目标)的情况下编译(例如,用于测试),您只需要以某种合理的方式安装C编译器和归档器;它应该会自动获取。如果它没有(例如,获取了错误的编译器),则设置环境变量CCAR,其中包含相应可执行文件的路径。
  • 当使用与主机不同的目标三元组x-y-z进行编译时,您需要设置环境变量CC_x-y-zAR_x-y-z,分别包含目标工具链的编译器和归档器的路径。这些通常是您在通过rustup安装此目标时添加到configconfig.toml文件中的相同路径。

(您可能需要设置一些额外的参数以确保编译器选择正确的目标,例如,使用 --target clang 标志。到目前为止,我只测试了 Android,如果您按照下面的示例进行,则不需要它。)

例如,当构建 Android 时,您可以在 NDK 中找到这个编译器和归档器。请参阅这篇指南。编译器将是 $NDK/toolchains/llvm/prebuilt/$HOST_TAG/bin/$TARGET$NDK_VERSION-clang,而 AR 将是 $NDK/toolchains/llvm/prebuilt/$HOST_TAG/bin/$TARGET-ar

这些要求对任何使用 cc 编译 C 库的项目都是相同的,所以如果您已经配置了这些,那么您当前配置可能也足够了。

通过为某些目标预构建库并将它们检入 git,可以取消这些要求。欢迎提交拉取请求!

Bindgen

我们使用 Bindgen 生成 C 库头文件的 Rust 绑定。这需要安装 clang

通过为某些目标预构建绑定并将它们检入 git,可以取消这些要求。欢迎提交拉取请求!

使用示例

假设 crate mylib 依赖于 tsf(它依赖于 tsf-sys),我的主机机器是 Windows,我想编译 mylib 以针对目标 armv7-linux-androideabi。假设 mylib 生成一个动态 C 库。

  1. 请确保使用 rustup target add armv7-linux-androideabi 下载目标。

  2. 然后下载该目标的工具链。在这种情况下,您想要编译的目标是 NDK,对我而言是 NDK 21。

  3. 将以下内容添加到 cargo 配置文件中(config.tomlconfig

[target.armv7-linux-androideabi]
linker = "C:\\path\\to\\ndk\\21.4.7075529\\toolchains\\llvm\\prebuilt\\windows-x86_64\\bin\\armv7a-linux-androideabi21-clang.cmd"
ar = "C:\\path\\to\\ndk\\21.4.7075529\\toolchains\\llvm\\prebuilt\\windows-x86_64\\bin\\arm-linux-androideabi-ar"
# Note that for this target specifically, the `ar` doesn't include the v7a but of the target. Just a quirk of the NDK.
  1. 设置以下环境变量(您可以将此粘贴到您的命令提示符中,或更永久地设置它们)
set CC_armv7-linux-androideabi=C:\\path\\to\\ndk\\21.4.7075529\\toolchains\\llvm\\prebuilt\\windows-x86_64\\bin\\armv7a-linux-androideabi21-clang.cmd
set AR_armv7-linux-androideabi=C:\\path\\to\\ndk\\21.4.7075529\\toolchains\\llvm\\prebuilt\\windows-x86_64\\bin\\arm-linux-androideabi-ar 
  1. 遵循上面提到的 bindgen 要求,包括设置 LIBCLANG_PATH 环境变量。

  2. 最后,使用 cargo 构建 mylib

rem Comments in windows command line are given by rem
rem Print out our environment variables to check they were set right. You can obviously omit this
echo %CC_armv7-linux-androideabi%
echo %AR_armv7-linux-androideabi%
echo %LIBCLANG_PATH%
cargo build --target armv7-linux-androideabi --release

对于非 Windows 主机机器,所有步骤都相同,只是命令略有不同。例如,要设置环境变量,您可以在 cargo build 命令之前放置 VAR=VALUE ,这很好。

贡献

这个 crate 是按照 这个 rust-bindgen 教程编写的。如果您能遵循那个教程,那么您就理解了这个 crate 的工作原理。

TinySoundFont 已捆绑

TinySoundFont 以头文件的形式分发。这个 crate 包含了一个从该头文件编译而成的静态库,这使得它非常方便使用 - 您不需要做任何特别的事情。

目前还没有提供未捆绑的版本。欢迎提交拉取请求。

依赖项

~0–2MB
~37K SLoC