This toolkit should make it feasible to import custom samples into an SRX ROM image. To make full use of this, it's ideal you also have a way to burn the created images onto an SRX card. The current recommendation is the OpenSRX project:
https://github.com/rperdriau/opensrxcard
It is also possible to load the imported multisamples as is into the RolandCloud VST's for testing.
In addition, experimental patch support is also included. Note, however, that patches only currently support the XV-3080, though anyone else with other SRX-compatible synths are more than welcome to contribute to add more models.
- Python 3
-
Total filesize needs to conform to the size of the ROM image, meaning ideally your sample set should be 93 MB in 24-bit PCM audio or less. The remaining space is needed for the definition tables and headers.
-
Due to the ROM's being organized in 1 MB blocks, a single sample cannot be larger than exactly 992KB after compression.
-
All imported audio needs to be in mono with a bitrate of 24-bit, or 32-bit linear PCM.
-
If you wish to have a reverse playback variation of a multisample without needing to import duplicate samples, make sure to have "REV" in the name of the alternate sfz file. Currently the way the script works is to import both versions at once and pick one as needed to avoid too much complexity.
-
While not thoroughly tested, it's likely the SRX format cannot support more than 65535 multisamples, and the hard limit of samples per multisamples is, at most, 128 (1 per note)
-
You may get warnings about the sample being too loud. If this happens, it will attempt to soften lower frequencies to compensate (de-emphasis). This should not be a major problem in most cases, though.
- Compile all of the samples you wish to use, accompanied by an SFZ file for the sake of the multisample entries.
1a. Each SFZ filename should preferably begin with "xxx-" where the x's are numbers, though anything else for the first four characters that organize them the way you wish for the ROM will do. The format also only allows up to twelve characters, so anything more than 16 characters (including the prefix) will be truncated! Additionally, the required opcodes for full use of these tools are "sample" and "hikey". The prefix length may be extended later to accomdate more ambitious ROM creators.
1b. All samples in the SFZ files should point to WAV samples located in the same directory.
-
If you're particularly technically savvy, an additional but optional step is to edit the headers of the included Template ROM. This will be necessary if you wish to import a recognizable card other than that ID.
-
If you wish to import patches as well, make sure there is a SysEx bank dump of XV-3080 presets included. These dumps should be stored in the following path relative to the samples to import: "Patches/3080.syx" for XV-3080 patches.
-
It should now hopefully be as simple as running "runme.py".
4a. One way is to run it without arguments via Python 3, in which case you will be prompted for input folder, output filename, the option to import patches, and an option for verbose output (particularly useful if some samples report DC offset).
4b. The other method is to run it in your command line tool with arguments: "runme.py -i (input folder) -o (output file) (-p) (-v)
The resulting file for loading into a card via OpenSRX should now be available for testing. It's recommended you load the additionally-created "Result.bin" into RolandCloud SRX-series VST's first in case of audio output issues, which is a very real possibility with DC offset in particular, knowing the nature of DPCM audio though you will not be able to verify patches this way. If this is not an option, be sure to also check the output of the scripts, turning on verbose mode as needed in order to determine problematic samples.
Credit goes to https://github.com/hackyourlife for the SRX Scrambling C code, and for the Java classes making it possible to feasibly encode in the FCE-DPCM format. Technically, said code was since converted into Python for the sake of portability, but credit is still due for using them as a basis.