MIDIApps icon indicating copy to clipboard operation
MIDIApps copied to clipboard

Casio CZ-101 dump patch(es) to SysEx Librarian

Open rpatters1 opened this issue 7 years ago • 8 comments

I have been beating my head against this issue for a while, and perhaps there is something I am missing. It appears that the Casio CZ-101 (and CZ-1000) require the computer to request each patch one at a time. There is no way to send them directly from the synth itself, as suggested in the help file for SysEx Libarian. So I have created a .syx file containing the request for a patch and loaded it into SysEx Librarian. However, I can't both listen for a response and play the .syx file. When I play the .syx file it appears to work, but I can only do that when the program is not listening for the response. (!)

Unless I'm missing something, there needs to be a way to let me send a command from SysEx Librarion to dump the patch back into SysEx Libarian. I found a comment on a message board from someone who claims to be using SysEx Librarian flawlessly with CZ-101, but I can't figure out how to do it.

rpatters1 avatar May 27 '17 21:05 rpatters1

Unfortunately, the CZ-101 is really weird. SysEx Librarian can't do it, sorry. You would need some special software that deals only with the CZ-101, but I don't know of any on OS X.

You might also try this if you have an iPad or iPhone: https://coffeeshopped.com/cz-touch

I don't think there's a prefab set of sysex messages that you can send from SysEx Librarian or some sequencer. You really do need the full handshake logic, and that requires a program to interpret what it sees from the CZ-101.

Last time someone asked, I wrote this:

Unfortunately the CZ-101 (and CZ-1000 and similar synths) have their
own VERY STRANGE way of dealing with sysex dumps, which is unlike any
other device. They basically need some amount of special handshaking
going back and forth between the computer and the synth. SysEx
Librarian doesn't do this (it just sends the sysex message directly to
the synth), so it probably just won't work.

Some references: http://nosuch.com/mostly-midi/archive/cz101.sysex http://machines.hyperreal.org/manufacturers/Casio/CZ/info/CZ.sysex.txt http://machines.hyperreal.org/manufacturers/Casio/CZ/info/ CZ101.sysex.txt http://groups-beta.google.com/group/rec.music.makers.synth/msg/049f3b72ca0cae48 http://groups-beta.google.com/group/rec.music.makers.synth/msg/b06d7f693844f37a http://groups-beta.google.com/group/rec.music.synth/msg/77500e72fc2d77e1

"The CZ line was among the first commercially available MIDI keyboards,
something reflected in their goofy MIDI Sysex implementation" http://groups-beta.google.com/group/rec.music.makers.synth/msg/9f76c6cca2136365

Sorry for the bad news, but this is the kind of issue you encounter
with synthesizers that are almost old enough to drink.

krevis avatar May 27 '17 22:05 krevis

Hello, I'm also using SysEx Librarian with my CZ-101. The part about handshaking fortunately isn't the whole truth! :)

Yes, you can't just send a patch from the synth itself. And yes, it has this handshaking stuff in its firmware. But you can concatenate the whole handshaking process into one(!) handy SysEx. Here's how – notice the yellowed table row: http://www.kasploosh.com/projects/CZ/how_to/midiox-cz101-receive.html So what did I do? Put "F0 44 00 00 70 10 60 70 31" into a .syx file using a hex editor, which tells the CZ to just send the currently selected patch settings without complaining.

Steps:

  1. Start SysEx Librarian as well as MIDI Monitor, set both to communicate with your CZ.

  2. Send the SysEx mentioned above with SysEx Librarian.

  3. Look at the MIDI Monitor, it lists a response of 263 Bytes length. Save it to a .syx file.

  4. That's it … according to the article. But for me, the CZ refused to load the produced .syx file. So I mimicked some patch files from the net: Edit the .syx file with a hex editor, replacing the part at address 0004h "70 30" with "70 20 60" (= load, into current settings memory). The file length should be 264 Bytes now.

Conclusion: Dumping with SysEx Librarian would require an easy manufacturer-specific SendRq, which indeed would be a cool feature, as there are other synths without dump button like the new Yamaha Reface Series. But there seems to be need for manual work in order to make the received patch loadable again (or I did miss something).

elosha avatar Jul 16 '17 14:07 elosha

I was not even asking for something so complicated as a manufacturer-specific SendRq. The mere ability to send an arbitrary .syx while in listening mode would resolve the issue.

As it is, with assistance from an (ex-) Unisyn guru, I was able to convert my Unisyn files to Casio .syx, so my immediate issue was resolved. SysEx Librarian can send them to the Casio without any issues. (As elosha mentioned, you can build the handshake into them with a little manual tweaking.)

rpatters1 avatar Jul 16 '17 14:07 rpatters1

P.S. BTW I also did something similar to elosha before I got the Unisyn converted files. I started both SysEx Librarian and Pure Data (PD). I put SysEx Librarian in listening mode and used PD to send the request sysex. SysEx Librarian then received the 263 byte sysex message as expected. (Which must be manually tweaked to 264 bytes before it will load back.)

rpatters1 avatar Jul 16 '17 15:07 rpatters1

Hello, I'm also using SysEx Librarian with my CZ-101. The part about handshaking fortunately isn't the whole truth! :)

Yes, you can't just send a patch from the synth itself. And yes, it has this handshaking stuff in its firmware. But you can concatenate the whole handshaking process into one(!) handy SysEx. Here's how – notice the yellowed table row: http://www.kasploosh.com/projects/CZ/how_to/midiox-cz101-receive.html So what did I do? Put "F0 44 00 00 70 10 60 70 31" into a .syx file using a hex editor, which tells the CZ to just send the currently selected patch settings without complaining.

Steps:

1. Start SysEx Librarian as well as MIDI Monitor, set both to communicate with your CZ.

2. Send the SysEx mentioned above with SysEx Librarian.

3. Look at the MIDI Monitor, it lists a response of 263 Bytes length. Save it to a .syx file.

4. That's it … according to the article. But for me, the CZ refused to load the produced .syx file. So I mimicked some patch files from the net: Edit the .syx file with a hex editor, replacing the part at address 0004h "70 30" with "70 20 60" (= load, into current settings memory). The file length should be 264 Bytes now.

Conclusion: Dumping with SysEx Librarian would require an easy manufacturer-specific SendRq, which indeed would be a cool feature, as there are other synths without dump button like the new Yamaha Reface Series. But there seems to be need for manual work in order to make the received patch loadable again (or I did miss something).

Hi first of all thanks for your solution! actually I followed untiled the step 3 of your method but I wasn't able to find / replacing the part at address 0004h "70 30" with "70 20 60" / this part from step 4. could you please explain little bit more about it?

Thanks

leefromydp avatar Jan 08 '22 06:01 leefromydp

Hi first of all thanks for your solution! actually I followed untiled the step 3 of your method but I wasn't able to find / replacing the part at address 0004h "70 30" with "70 20 60" / this part from step 4. could you please explain little bit more about it?

I can try :)

First make sure you operate your hex editor properly: „70 30“ will appear in the hex section, not as ASCII characters. Same goes for the request, it already is in hex format and must not be converted. Ofc don‘t use a text editor to generate your .syx request command file.

Casio did something that doesn‘t make much sense: The hex string „70 30“ you are searching for in the answer means „I‘m now replying with patch data“. The hex string „70 20 60“ you want to replace it with means „Please load this patch data“. Other manufacturers made it easier by emitting a neutral command meaning „This is patch data“ that is both valid for sending/receiving.

Also make sure that you did not produce any mistakes, i.e. requesting of a patch that doesn‘t exist, or messed up MIDI connection, or capturing mixed data from other devices. Also check if the answer from your CZ (which model, maybe a model with added complexity?) is reasonable in byte size to contain patch data. I think a full CZ-1 patch set is twice the size of CZ-1000.

elosha avatar Jan 08 '22 12:01 elosha

Hi first of all thanks for your solution! actually I followed untiled the step 3 of your method but I wasn't able to find / replacing the part at address 0004h "70 30" with "70 20 60" / this part from step 4. could you please explain little bit more about it?

I can try :)

First make sure you operate your hex editor properly: „70 30“ will appear in the hex section, not as ASCII characters. Same goes for the request, it already is in hex format and must not be converted. Ofc don‘t use a text editor to generate your .syx request command file.

Casio did something that doesn‘t make much sense: The hex string „70 30“ you are searching for in the answer means „I‘m now replying with patch data“. The hex string „70 20 60“ you want to replace it with means „Please load this patch data“. Other manufacturers made it easier by emitting a neutral command meaning „This is patch data“ that is both valid for sending/receiving.

Also make sure that you did not produce any mistakes, i.e. requesting of a patch that doesn‘t exist, or messed up MIDI connection, or capturing mixed data from other devices. Also check if the answer from your CZ (which model, maybe a model with added complexity?) is reasonable in byte size to contain patch data. I think a full CZ-1 patch set is twice the size of CZ-1000.

Thanks for the reply!

So first I made the .syx file with the Terminal and then I tried with hex fiend.

I'm trying to back up my presets from CZ101 (without any modification) and sending MIDI via Motu MIDI EXPRESS.

and followed the steps you've written and edited on hex fiend. and not sure if this affects or not text encoding was set to ASCll

also file was still 263kb after I edited and saved.

  • tried both way to receive data from individual patch and the method you've written (receiving from currently selected patch)

just found that I was replacing 70 30 00 00 to 70 20 60 00 not 70 20 60 00 00. so I tried again got 264kb. but stil l couldn't get it. seems like I supposed to get MIDI DATA FULL when I have it but weird.

leefromydp avatar Jan 08 '22 13:01 leefromydp

The size mismatch was a good find: Yes, the command to re-load the data into your CZ will be 1 Byte longer.

Hex Fiend is a very good tool, I use it too. Text encoding doesn't play a role in this at all, just enter as hex digits, not as text. Basically you edit "raw data". In Hex fiend this is the left area, whereas text representation would be on the right. Spaces are formatting only and should not be entered.

(Sorry if this sounds stupid, I'm not aware of your current level of knowledge about hex editing.)

elosha avatar Jan 14 '22 10:01 elosha