//! 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); } }