# Fifteen Thieves **XV fures** Interface for talking to Roland synthesizers, and a few extra utilities (mostly in Python). ## List of tools - `dump_patches.py`: Dump factory patches from a SD-80 or SD-90. - `inspect_memoryregion.py`: Show the content of a `.memoryregion` file generated from patch dumps in a somewhat human-readable form. - `srx_convert.py`: Convert dumped SD-80 / SD-90 patches to Roland SRX VSTi plugin. - `test_amap.py`: Load an address map file and print the memory structure specified by it. - `wave_stats.py`: Generate stats on usage of SD-80 / SD-90 waveforms from the dumps. ## Other files - `amap`: System exclusive address maps. - `gs.amap`: Address map for SOUNDCanvas GS devices. - `sd-80.amap`: Address map for STUDIOCanvas SD-80 and SD-90. - `xv-5080.amap`: Address map for XV-5080 and other models in the XV lineup. - `xv`: Python library for interfacing with Roland DT1/RQ1 system exclusive messages. ## Caution - Many scripts contain hardcoded MIDI ports. This is subject to change, but before such changes happen, you'll have to modify them manually. - pypy is recommended for running all the scripts whenever possible. - All scripts are developed under Linux. There's no reason they wouldn't work on other major platforms, though (given you have specified the correct MIDI port). ## Information for individual tools ### `dump_patches.py` Requires hardware SD-90 or SD-80. Give this script a few minutes to run, then you'll get the following files: ``` data +--patchparam | +--classical | | +--00-000-Piano 1.memoryregion | | +--... | +--contemporary | | +--00-000-Ac.Piano.memoryregion | | +--... | +--... +--rhythmparam +--classical | +--00-Standard Set.memoryregion | +--... +--contemporary | +--00-StandardSet2.memoryregion | +--... +--... ``` These files contain preset data for each individual factory patch and can be used by other tools. ### `inspect_memoryregion.py` Requires one argument (path to the `.memoryregion` file). Prints the content of the given file in a semi-human-readable form. Needs `data/sdwavelist` to work. This file is still distributed by Roland Japan. You need to remove the header from the file (the first line contains name of the first waveform). ### `srx_convert.py` Requires populated `data/patchparam` and `data/rhythmparam` folder. Converts patch data in these folders into a format that can be used by Roland SRX VSTi plugins. You need to mod the plugin with wave ROM dump of SD-90 or SD-80 for these patches to work. You'll have to obtain the dump yourself, as they are not in this repository for obvious reasons. Of course, you can use these patches with unmodified SRX VSTi plugins as well. Takes one argument, specifying the SRX VSTi title you want to generate the patches for. | SRX Plguin | Parameter Used | | --------------- | -------------- | | Piano 1 | 2 | | Studio | 3 | | Strings | 4 | | Dance Trax | 5 | | Orchestra | 6 | | Keyboards | 7 | | World | 9 | | Brass | 10 | | Piano 2 | 11 | | Electric Piano | 12 | Generated patches are in `data/srxsdpresets`. Subfolders indicates different organization of patches. ### `test_amap.py` Load an address map file and print the memory structure specified by it. The path to the amap file is hardcoded. ### `wave_stats.py` Requires populated `data/patchparam` and `data/rhythmparam` folder. Print how many times each waveform is used by all the patches. Needs `data/sdwavelist` to work. This file is still distributed by Roland Japan. You need to remove the header from the file (the first line contains name of the first waveform). ## Disclaimer This project is in no way endorsed by or affiliated with Roland Corporation. This project contains no reverse engineered code, or data that are extracted from Roland hardware units or Roland software. All memory address maps are transcribed from public documentation. File format are learned through examination of file contents. Misuse of this project can lead to legal disputes, and the author of this project shall not be held responsible for such misuse.