home *** CD-ROM | disk | FTP | other *** search
- Conversion for both the DX and CZ series have a few things in common. The
-
- preprocessor variable TOTAL_SIZE should be changed to the total size (in
-
- bytes) of a single voice in the synth. The preprocessor variable VOICE_SIZE
-
- should be changed to the number of voice parameters that the program will be
-
- setting when generating new voices (which will correspond to the number of
-
- parameters given in the RANDOM_FILE parameter file).
-
-
-
- Voices are always sent to and read from the voice edit area of the synth.
-
-
-
- You will have to set up a new RANDOM_FILE with appropiate parameter contents.
-
- I hope you know the function of all the voice parameters because it would take
-
- another 10 pages to explain all of them in detail -- check your owner's manual.
-
- For the DX100 you can examine how I set them against the listing in the back
-
- of the owner's manual (sorry, I'm not going to type it in!). The CZ parameters
-
- can be checked against the listing in CZ101.DOC .
-
-
-
- The remaining comments have to deal principally with random voice generation
-
- and are best dealt with separately for each series.
-
-
-
- DX series Conversion
-
- --------------------
-
- Voice generation is extremely simple. Essentially, each data byte in the
-
- voice corresponds to a voice parameter in the synth. So, to generate a voice,
-
- we go through each data byte, generate a random parameter as dictated by the
-
- RANDOM_FILE parameter file, stuff it into the data byte, and continue. When
-
- all the data bytes are filled we are done. All this is done in the make_voice()
-
- routine. This is a slight over-simplification, however. The scheme described
-
- is adhered to only for the first VOICE_SIZE data bytes. The remaining bytes
-
- are either voice name bytes (into which we put "RANDOM") or parameters which
-
- have no effect on the DX100 (into which we put 0). In addition, certain of
-
- the VOICE_SIZE bytes are modified as described in the make_voice() routine to
-
- produce more pleasing effects in ways that are difficult to deal with in the
-
- RANDOM_FILE parameters.
-
-
-
- Note that whenever a voice name is obtained from the user for a new voice,
-
- it is also copied into the appropiate data bytes in the voice (overwriting
-
- "RANDOM" or whatever).
-
-
-
- CZ series Conversion
-
- --------------------
-
- As stated previously, the program should already work for the CZ-1000 and 5000.
-
- However, the 5000 (unlike the 1000) is not 100% identical in system exclusive
-
- features. The important thing is that the tone data format *is* 100% identical.
-
- However, there are certain other data that can be sent for the 5000 as well as
-
- tone data (namely GLIDE NOTE, GLIDE TIME, MODULATION DEPTH, VOLUME LEVEL, and
-
- GLIDE ON/OFF). Not having a CZ-5000 I don't know if it is important to set any
-
- of these, but it would seem that since these are not an intrinsic part of the
-
- tone data their setting(s) should be left to the user. Not to mention that
-
- there is no way to *read* them back from the 5000.
-
-
-
- If you are going to attempt conversion for some other CZ (e.g., CZ-1), good
-
- luck! Well really, it is not impossible, just a lot harder than for a DX.
-
- First, check the differences in system exclusive implementation. If you are
-
- lucky, (like with the CZ-1000) the tone data format will be identical. If
-
- there are no other things to be sent with a tone, then no conversion is needed.
-
- If you are not so lucky, and there are differences in the system exclusive
-
- implementation, keep a few things in mind:
-
-
-
- 1) Casio sends their data bytes with the nibbles reversed. Notice
-
- that at the end of my make_voice() routine, all the just
-
- generated data bytes get reversed.
-
-
-
- 2) If the data byte values to be sent don't seem to have any simple
-
- relation to the parameter value (like VIBRATO DELAY TIME on
-
- the CZ-101) you can use CONVERT.PRG to convert an ASCII hex
-
- file you've created in an editor to binary (and back again
-
- if you've made an error and want to examine a binary file).
-
-
-
- 3) If a name can be stored with a voice, look at the parts of the DX
-
- code that deal with that (usually short sections surrounded
-
- by #ifdef DX100, #endif dealing with 'v_name' in between).
-
-
-
- 4) Handshaking is done by handshake().
-
-
-
- 5) If the system exclusive implementation is *similar* (say just more
-
- ADSR steps for example) you may be able to get away with not
-
- re-writing the make_voice() routine from scratch, perhaps just
-
- by extending the range of a loop variable.
-
-
-
- 6) Keep in mind when looking at make_voice() that many data values are
-
- being put in a single byte or, worse, split across bytes. Don't
-
- yell at me. Also, those incredible messy functions you see
-
- are because for some reason Casio doesn't believe that if a
-
- parameter value is 35 you should send 35, instead you send 86
-
- (or whatever).
-
-
-
- If you are willing to settle for just a voice librarian but not generator, the
-
- conversion should be trivial and you can probably forget all my little helpful
-
- suggestions above.
-
-