3个版本
0.1.2 | 2019年5月19日 |
---|---|
0.1.1 | 2019年5月7日 |
0.1.0 | 2019年5月7日 |
#491 in 音频
700KB
22K SLoC
Game Music Emu Rust
本crate包含对Game Music Emu的Rust绑定。目前它相当基础,并不涵盖所有内容,但最终它将涵盖gme.h中大部分函数的绑定。
入门
将以下内容添加到您的Cargo.toml
中。
gme = "0.1"
条件编译
与常规版本的Game Music Emu一样,您可以通过向Cargo.toml
中添加功能来选择包含哪些模拟器。
例如,如果您只想使用Nintendo和Game Boy模拟器,您会写
gme = { version = 0.1, default-features = false, features = ["gbs", "nsf"]
查看Cargo.toml以获取所有可用功能。构建逻辑在build.rs中。您可以在运行时调用gme::type_list()
来获取您编译的模拟器列表。
通过本地函数使用
从gme.h暴露的函数位于根级别,可以在native.rs中查看。大多数函数都需要一个EmuHandle
,它持有C++代码中MusicEmu
实例的指针。
您可以这样简单地获取一个EmuHandle
let handle = gme::new_emu(gme::EmuType::Nsf, 44100);
您也可以通过加载文件来获取一个句柄。这是一个便利函数,它将创建一个已经加载了文件数据的实例。
let handle = gme::open_file("test.nsf", 44100).ok().unwrap();
一旦您有了句柄,您就可以通过它访问任何函数
let track_count = gme::track_count(&handle);
gme::start_track(&handle, 0);
EmuHandles
是引用计数的,当它们被丢弃时,它们引用的MusicEmu
实例将自动释放。
通过包装器使用
您可以使用GameMusicEmu
结构体,而不是使用本地函数,它提供了对接受EmuHandle
的函数的包装。您可以这样使用它
use gme::{EmuType, GameMusicEmu};
let emu = GameMusicEmu::new(EmuType::Nsf, 44100);
emu.load_file("test.nsf");
emu.start_track(0);
GameMusicEmu
结构体最终将不仅仅是一个包装器。
作者
- Jay Pavlina - 初始工作
还可以查看参与此项目的贡献者列表。
许可证
本项目采用MIT许可证 - 请参阅LICENSE.md文件以获取详细信息。
Game Music Emu采用LGPLv2.1许可证。有关详细信息,请参阅其许可证。
致谢
- Shay Green为创建Game Music Emu
- Michael Pyne为维护Game Music Emu