# LSDJ [LittleSoundDj](https://www.littlesounddj.com/lsd/index.php), or _LSDJ_ for short, is popular music tracker software for the original [Nintendo Game Boy](https://en.wikipedia.org/wiki/Game_Boy). While the handheld console originally was released in 1989, ([chiptune](https://en.wikipedia.org/wiki/Chiptune)) musicians still use its hardware to create and perform electronic music nowadays. While LSDJ has a built-in filesystem for managing tracks, you need tools to get out the individual files for back-ups or constructing new save files from exported tracks. This crate provides a library for manipulating LSDJ save files/SRAM, in combination with a command-line utility crate for managing your songs. It was inspired by my work on [liblsdj](https://github.com/stijnfrishert/liblsdj), an equivalent library in C. The developer behind LSDJ has also made [LSDPatcher](https://github.com/jkotlinski/lsdpatch), a GUI package for managing your songs. ## Example ```rust no_run use lsdj::{ sram::SRam, fs::{Index, File} }; // Load a save file from disk let sram = SRam::from_path("bangers.sav").expect("Could not load SRAM"); // Access one of the files if let Some(file) = sram.filesystem.file(Index::new(0)) { // Convert the file to an .lsdsng (common song format) let lsdsng = file.lsdsng().expect("Could not convert file to LsdSng"); // Store the song on disk lsdsng.to_path("put_yo_hands_up.lsdsng").expect("Could not save LsdSng"); } ``` ## Features The crate currently supports the following functionality: - [`SRAM`](crate::sram) serialization and deserialization - [`Filesystem`](crate::fs) manipulation (querying, inserting and removing files) - [`LsdSng`](crate::lsdsng) serialization and deserialization - Full implementation of the [compression algorithm](crate::serde) (verified with tests) ## Wishlist These are features I'm interested in exploring/adding at a certain point: - [`SongMemory`](crate::song) parsing into song structures per format version. (This would allow manipulating songs.) - `.lsdprj` support - `ROM` handling, mainly for sample manipulation ## Support If you like this crate and want to support me somehow, consider buying some of [my music](https://4ntler.bandcamp.com/).