3个版本

0.1.2 2019年5月19日
0.1.1 2019年5月7日
0.1.0 2019年5月7日

#491 in 音频

MIT AND LGPL-2.1-or-later

700KB
22K SLoC

C++ 21K SLoC // 0.1% comments Rust 448 SLoC // 0.0% comments

Game Music Emu Rust

Game Music Emu Crate Game Music Emu Documentation

本crate包含对Game Music Emu的Rust绑定。目前它相当基础,并不涵盖所有内容,但最终它将涵盖gme.h中大部分函数的绑定。

入门

将以下内容添加到您的Cargo.toml中。

gme = "0.1"

条件编译

与常规版本的Game Music Emu一样,您可以通过向Cargo.toml中添加功能来选择包含哪些模拟器。

例如,如果您只想使用NintendoGame 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结构体最终将不仅仅是一个包装器。

作者

还可以查看参与此项目的贡献者列表

许可证

本项目采用MIT许可证 - 请参阅LICENSE.md文件以获取详细信息。

Game Music Emu采用LGPLv2.1许可证。有关详细信息,请参阅其许可证

致谢

  • Shay Green为创建Game Music Emu
  • Michael Pyne为维护Game Music Emu

依赖关系