This branch predates CI on `main`. `cargo fmt --all` only; no behaviour. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
29 lines
1.1 KiB
Rust
29 lines
1.1 KiB
Rust
//! Dump one BGM bank's waves as RIFF/XMA so they can be decoded and compared
|
|
//! against a capture of the running game.
|
|
//!
|
|
//! cargo run -p sylpheed-formats --example bgm_dump -- BGM_103.slb OUTDIR
|
|
use sylpheed_formats::media::{self, DirectorySource};
|
|
use sylpheed_formats::slb;
|
|
|
|
fn main() {
|
|
let name = std::env::args()
|
|
.nth(1)
|
|
.unwrap_or_else(|| "BGM_103.slb".into());
|
|
let out = std::env::args().nth(2).expect("OUTDIR");
|
|
let disc = std::env::var("SYLPHEED_DISC").expect("SYLPHEED_DISC");
|
|
let src = DirectorySource::new(std::path::PathBuf::from(&disc));
|
|
std::fs::create_dir_all(&out).expect("outdir");
|
|
let h = sylpheed_formats::hash::name_hash(&name);
|
|
let bytes = media::read_sound_bank(&src, h).expect("bank");
|
|
println!("{name}: {} B", bytes.len());
|
|
for (i, r) in slb::to_xma_riffs(&bytes).iter().enumerate() {
|
|
let p = format!("{out}/{}_{i}.xma", name.trim_end_matches(".slb"));
|
|
std::fs::write(&p, r).expect("write");
|
|
println!(
|
|
" wave {i}: {} B (byte_size {}) -> {p}",
|
|
r.len(),
|
|
r.len() - 60
|
|
);
|
|
}
|
|
}
|