sagamusix / JDTools

Patch conversion utility for Roland JD-800 / JD-990 and compatibles
Other
46 stars 5 forks source link
conversion converter jd-08 jd-800 jd-990 midi roland sysex zenology

JDTools - Patch conversion utility for Roland JD-800 / JD-990 and compatibles

While it is easy to convert JD-800 patches to use with the JD-990 (the JD-990 itself can do it through RAM card exchange, and there are PC tools for it as well), there don't appear to be any tools to go in the opposite direction. In the general case this makes sense, because the JD-990 has more features.

However, I purchased a sound bank for the JD-800 where the original SysEx dump for the JD-800 was lost and all I got was a SysEx dump for the JD-990, which my JD-800 obviously couldn't load.

Knowing that the patches in this dump must be fully compatible with the JD-800, I started studying the SysEx dump structures of the two synths and threw together some code in half a day to convert between the two.

The tool can load both SYX files (raw SysEx dumps) and MID / SMF files (Standard MIDI Files) and convert from JD-800 patch format to JD-990 and vice versa. It can also convert special setups but other multi mode settings cannot be converted (there isn't much to convert that the two synths have in common...).

After the basic functionality was done, I wondered what would be required to support the JD-800 VST plugin or the JD-08 as well - turns out, quite a lot! Nevertheless, I managed to add support for them as well, so you can convert original JD-800 patches to the plugin's format (as long as they don't use ROM card waveforms), and also convert plugin banks to use with the original JD-800 (as long as they don't use extended features such as unison or tempo-synced LFOs). As the plugin appears to be based on Roland's ZenCore engine, don't expect conversions that sound 100% identical (there are well-known differences). Some parameters seem to have much lower internal precision than on a real JD-800. On the upside, the converted files also work with the Zenology plugin. But as the conversion process is quite complex, it's always possible there is a bug, so please report those if you find any.

Figuring out the data structures shared by the plugin, SVZ and SVD patch formats was a lot of work, so if you find this tool useful, please consider donating a few bucks. This would be especially appreciated if you are going to sell the converted files. Alternatively you can pay me by sending your converted sound sets. ;)

You can also support me by purchasing my "Explorations Vol. 1" and "Explorations Vol. 2" sound banks. They are compatible with all JD models supported by this software!

Usage

JDTools is a command line utility and has no Graphical User Interface. It can be invoked in the following ways. Values in <angled brackets> indicate user-supplied values. The angled brackets must not be entered into the command line.

Conversion

It is possible to convert between practically all format combinations:

The input format of the conversion is determined automatically, but due to the different output options, the desired target format has to be specified explicitly.

By invoking JDTools convert syx <input.file> <output.syx>, the input file is converted to a SysEx dump. If the source is a JD-800 SysEx dump, the output file is a JD-990 SysEx dump, in all other cases the output is a JD-800 SysEx dump.

By invoking JDTools convert bin <input.file> <output.bin>, the input file is converted to the JD-800 VST patch bank format (BIN).

By invoking JDTools convert svd <input.file> <JD08Backup.svd> <position>, the input file is converted to the JD-08 patch bank format (SVD). The provided output file must be an already existing JD08Backup.svd file obtained from your JD-08. The file is then overwritten, but its contents are replaced with the new patch data. The output file should be named JD08Backup.svd so that the JD-08 can find it. The last parameter is optional and specifies the starting patch position to overwrite. This can be just a bank (A/B/C/D) or a patch number (e.g. B42).

By invoking JDTools convert svz <input.file> <output.svz>, the input file is converted to the ZC1 hardware patch bank format (SVZ), for use with the Jupiter-X with the JD-800 Model Expansion and potentially other hardware synthesizers based on ZenCore.

To convert e.g. a JD-800 VST patch bank to a JD-990 SysEx dump, an intermediate conversion to a JD-800 SysEx dump is required.

As an example, the following batch script can be used to convert all SYX and MID files in the current directory and its subdirectories to BIN files to use with the plugin. It assumes that JDTools.exe is also placed in the current directory. The script also creates a conversion log file called convert.txt, which you can review to check if any of the conversions were lossy (e.g. due to missing ROM card waveforms).

@echo off
for /R %%F in (*.syx, *.mid) do (
echo %%F >> convert.txt
JDTools convert bin "%%F" "%%F.bin" >> convert.txt 2>&1
)

Merging

Merge any number of SysEx dumps (SYX, MID) containing temporary patches by invoking JDTools merge <input1.syx> <input2.syx> <input3.syx> ... <output.syx>. If an input file contains multiple dumps for the temporary patch area, they are all considered.

The following batch script can be used to pass a directory name instead of a list of individual files:

@echo off
REM Usage: merge.cmd Path\To\Directory output.syx 
setlocal enabledelayedexpansion enableextensions
set baseDir=%~1
set LIST=
for %%x in ("%baseDir%\*.syx") do set LIST=!LIST! "%%x"
set LIST=%LIST:~1%

JDTools merge %LIST% %2

Listing

List all the contents of a SysEx dump (or any of the other supported input formats) by invoking JDTools list <input.syx>. This also lists objects that JDTools cannot convert (such as the JD-800 display area), but the actual contents are not shown for most of them. Useful for easily creating a patch listing of your banks.

Verifying

To check if a SysEx dump (SYX or MID) contains any checksum errors, invoke JDTools verify <input.syx>.

Version History

v0.18 (2024-09-19)

v0.17 (2024-01-04)

v0.16 (2022-11-28)

v0.15 (2022-09-05)

v0.14 (2022-09-05)

v0.13 (2022-09-03)

v0.12 (2022-08-04)

v0.11 (2022-08-03)

v0.10 (2022-08-02)

v0.9 (2022-08-01)

v0.8 (2022-07-31)

v0.7 (2022-07-25)

Various small improvements:

v0.6 (2022-07-22)

v0.5 (2022-07-21)

License

JDTools is provided under the BSD 3-clause license. JDTools makes use of miniz, which is released under the MIT license. See license.md for details.

Building

This project is written in C++ 20. To build it, use the cross-platform CMake project, or alternatively the Visual Studio 2019 / 2022 solution for Windows.