start - tips - pictures - signal flow - presets - repair dead keys | apps: patch editor - sysx analyzer | midi: sysx structure - cc messages - BCF2000
What does it speak?
You can use the pc to send a "Dump Request" message to the DK70. The unit responds with a "Patch Dump" message of 50 fixed bytes, which is a coded message that contains all of the settings needed to (re)create this particular patch sound. So it's a great way to back up your sounds!
The structure of the dump is not documented in the manual, but it's easy (but tedious work) to investigate how the message is built up. You also need some knowledge about hexadecimal and binary numbers. Especially for parameters that have an on/off setting, because one byte can theoretically house 8 different on/off settings. Good to know, the DK70 uses only half of one byte (4 bits). The upper 4 bits of one byte (in the patch data area) are always '0'.
It sorta kinda works like this and will take you an hour or 4:
- switch on the DK70 and go to patch 40 without changing a parameter
- start some midi software on the pc that can send/receive sysx
- use the software to request patch 40 from the DK70 (40 is a "user patch" number)
- the DK70 sends a message back containing the data for patch 40
- copy the received message to notepad
- change just one parameter setting on the SIEL DK70
- write to patch number 40 into the DK70 memory
- again, use the pc to request patch 40
- copy the newly received message to notepad
- analyse the differences between both messages
- document this
- repeat changing another parameter and analyse the difference one by one
Parameters 91-99 are global settings and are not saved with the Patch. These parameters also are not part of the SysX data.
However
Normally, you can send a received "Patch Dump" back to the synthesizer, and the dump should be accepted, immediately setting the parameters and recreate the sound. Unfortunately, so far it seems the DK70 refuses to receive its own dump. Awkward, because this makes the whole concept of Patch dumping only useful for:
- printing the parameters on screen
- converting the parameters to CC messages, which the DK70 does accept
I made an app that prints the SysX data on the computer screen in a readable way. After uploading the SysX file, you can download the CC-messages file, which you can send back to the dk70 to recreate the patch. See the sysx analyzer app page.
Thank you
I got some help from DK80 undocumented sysex (which is another synth) via this site.
I noticed some small differences with the EXPANDER 80 undocumented sysx from midimetric.com. Velocity sensitivity is implemented differently on the DK70:
-
EX80: an individual setting for every EG and saved with the Patch.
-
DK70: global setting, and not part of the Patch parameters.
So there's also a slightly different SysX message between the DK70 and the EXPANDER 80.
Also thank you:
- http://www.emismusic.co.uk/museum/Siel/EX80/SielExpander80.htm (CC codes)
- http://www.2writers.com/eddie/TutSysEx.htm (SysX tutorial)
- http://www.blitter.com/~russtopia/MIDI/~jglatt/tech/midispec/id.htm (Manufacturer ID numbers)
SIEL DK70 SysX "Dump Request" structure
Don't forget to set the DK70 to "MIDI EXT." first (button next to the VOLUME rotary), or else the "Dump Request" sent from the pc is ignored by the DK70.
The DK70 does not provide a way to start a SysX Dump from the panel (you can not "Start the dump on the instrument" as Cakewalk calls it), so you have to request for it from the computer:
F0 | Start of SysX |
21 | S.I.E.L. Manufacturer ID |
00 | Command "Dump Request" |
xx | [00..27] = Preset Patch numbers 0-39 [28..31] = User Patch numbers 40-49 [32..63] = ROM PACK patches 50-99 |
F7 | End of SysX |
SIEL DK70 SysX "Patch Dump" structure
SIEL DK70 - SYSX CHART --------------------------------------- Request DUMP: pos# 01-02-03-04-05 F0 21 00 28 F7 Position: HexValue [Description] 01: F0 [Start of SysX] 02: 21 [SIEL Manufacturer ID] 03: 00 [Command: Request SysX Dump] 04: 28 [Patch Number 40] 05: F7 [End of SysX] ---------------------------------------- SIEL DK70 sends 50 bytes of data: pos# 01-02-03-04-05-06-07-08-09-10-11-12-13-14-15-16-17-18-19-20-21-22-23-24-25-26-27-28-29-30-31-32-33-34-35-36-37-38-39-40-41-42-43-44-45-46-47-48-49-50 data F0 21 04 28 02 06 05 04 03 06 00 0D 01 00 06 0F 00 09 0F 0F 0F 00 03 01 0C 0F 0F 06 0F 06 06 00 00 0F 0F 00 01 02 02 00 0F 00 00 05 06 06 0E 0A 0E F7 SYSX HEADER Position: HexValue [Description] 01: F0 [Start of SysX] 02: 21 [SIEL Manufacturer ID] 03: 04 [Command: Patch Dump] [EX80 responds with 03] 04: 28 [Patch Number dec 40, can be any number between hex 00 and 63] 05: 02 [DK70 ID] [EX80 responds with 00] PATCH DATA Position: PanelParameterNumber (Description) values/ranges/flags ** if pos #46: 00-- (62 dco waves=(0)off) 06: (resets dco square 16' to max) 0F 07: (resets dco square 8' to max) 0F 08: (resets dco square 4' to max) 0F 09: (resets dco square 2' to max) 0F ** if pos #46: 01-- (62 dco waves=(1)square) 06: 64 (dco square 16') 00-0F 07: 65 (dco square 8') 00-0F 08: 66 (dco square 4') 00-0F 09: 67 (dco square 2') 00-0F ** if pos #46: 10-- (62 dco waves=(2)saw) see position #47 06: **garbage** 07: **garbage** 08: **garbage** 09: **garbage** 10: 51 (lfo 1 frequency) 00-0F 11: 41 (lfo 2 frequency) 00-0F 12: 04 (deg vca-a slope) 00-0F 13: 06 (deg vca-a release) 00-0F 14: 01 (deg vca-a attack) 00-0F 15: 02 (deg vca-a decay) 00-0F 16: 14 (deg vca-b slope) 00-0F 17: 16 (deg vca-b release) 00-0F 18: 11 (deg vca-b attack) 00-0F 19: 12 (deg vca-b decay) 00-0F 20: 34 (deg vcf slope) 00-0F 21: 36 (deg vcf release) 00-0F 22: 31 (deg vcf attack) 00-0F 23: 32 (deg vcf decay) 00-0F 24: 05 (deg vca-a sustain) 00-0F 25: 03 (deg vca-a break point) 00-0F 26: 15 (deg vca-b sustain) 00-0F 27: 13 (deg vca-b break point) 00-0F 28: 35 (deg vcf sustain) 00-0F 29: 33 (deg vcf break point) 00-0F 30: 23 (noise level) 00-0F 31: 75 (vcf deg level) 00-0F 32: 21 (detune interval) [dec 0-61] 0="00", 60="0C", 61="0D" 33: 21 (detune interval) 0="00", 60="03", 61="03" 34: 72 (vcf resonance) 00-0F 35: 82 (volume level) 00-0F 36: 43 (lfo 2 initial level) 00-0F 37: 53 (lfo 1 initial level) 00-0F 38: 42 (lfo 2 final level) 00-0F 39: 52 (lfo 1 final level) 00-0F 40: 44 (lfo 2 delay time) 00-0F 41: 54 (lfo 1 delay time) 00-0F 42: 71 (vcf cut off) [dec 0-99] 0="00", 1="02", 7="0E", 61="0A", 99="06" 43: 71 (vcf cut off) [dec 0-99] 0="00", 1="00", 7="00", 61="07", 99="0F" - for cutoff values 0,1,2...75, data = 0,2,4...150 (steps of 2)
- for cutoff values 76,77,78...99, data = 154,158,162...246 (steps of 4) 44: 24 (noise destination) -x-- 0=vca, 1=vcf 81 (chorus mode) ---x 0=on, 1=off (!!) 45: 22 (detune fine) 00-0F 46: 62 (dco waves) xx-- 00=(0)off, 01=(1)square, 10=(2)saw 73 (vcf keyb track) --xx 00=(0)off, 01=(1)half, 10=(2)full 47: 46 (lfo 2 waves) x--- 0=(1)triangle, 1=(2)square 74 (vcf trigger) -x-- 0=(1)single, 1=(2)multi ** if pos 46: 10-- (62 dco waves=(2)saw) 63 (dco saw octave) --xx 00=16', 01=8', 10=4' 48: 08 (deg vca-a dco mode) x--- 0=single, 1=double 45 (lfo 2 delay mode) --x- 0=manual, 1=auto 55 (lfo 1 delay mode) ---x 0=manual, 1=auto 49: 17 (deg vca-b damper pedal) --x- 0=off, 1=on 07 (deg vca-a damper pedal) ---x 0=off, 1=on 50: F7 [End Of SysX]