13个版本 (4个破坏性更新)
0.20.5 | 2024年6月18日 |
---|---|
0.20.4 | 2024年6月13日 |
0.20.2 | 2024年5月25日 |
0.19.1 | 2024年3月6日 |
0.16.0 | 2023年10月3日 |
#427 in 音频
每月下载量124次
485KB
11K SLoC
agb_tracker
agb_tracker
是一个库,用于在Game Boy Advance(GBA)上使用agb
库播放tracker音乐。
使用agb
播放背景音乐的默认机制是将整个音乐作为原始声音文件包含在内。然而,对于只有几分钟的音乐,这可能导致文件非常大(>8MB),占用大部分有限的ROM空间。
使用tracker,您可以在仅几个KB的ROM中存储许多分钟的音乐,这使得格式在牺牲一些CPU性能的情况下更加节省空间。
此库每帧大约占用GBA CPU时间的20-30%,用于4个通道,但其中大部分是agb
的混音。主要的step
函数大约使用2000个周期(<1%)。
示例
#![no_std]
#![no_main]
use agb::{Gba, sound::mixer::Frequency};
use agb_tracker::{include_xm, Track, Tracker};
static DB_TOFFE: Track = include_xm!("examples/db_toffe.xm");
#[agb::entry]
fn main(mut gba: Gba) -> ! {
let vblank_provider = agb::interrupt::VBlank::get();
let mut mixer = gba.mixer.mixer(Frequency::Hz32768);
mixer.enable();
let mut tracker = Tracker::new(&DB_TOFFE);
loop {
tracker.step(&mut mixer);
mixer.frame();
vblank_provider.wait_for_vblank();
}
}
请注意,当前您必须将32768Hz作为混音器的频率进行选择。这个限制将在未来的版本中取消。
概念
agb_tracker
库的主要概念是将尽可能多的工作移到构建时间,以使实际播放尽可能快。传递的tracker文件将被解析并转换为简化的格式,然后在游戏运行时进行播放。
理论上,tracker文件被转换成的格式与基本格式无关。目前,仅实现了XM格式,但根据需求,未来可以添加更多格式。
依赖项
~8.5MB
~154K SLoC