The mysterious Casio VZ-1
2024-08-02
In my last post I mentioned my attempts to make sense of the Casio VZ-1 keyboard synthesizer. The reality of how this machine works disagrees with the manual. In this post I will try to make sense of some of what is going on with this machine.
Algorithms: theory
In theory, the Casio VZ-1 uses a combination of ring modulation and phase modulation between up to 8 "modules" M1 through M8 which I prefer to call "operators" because that is what they are called in the Yamaha DX7 and that synth is much better known.
The operators are grouped into "lines". Operator M1 and M2 form line A, M3 and M4 are line B, etc. In the service manual Casio uses numbers for the lines. Line A is actually line 3, line B is line 2, line C is line 1 and line D is line 0.
The operators can be configured to interact in different ways, analogous to how the DX7 has "algorithms". This diagram from the service manual (which is also in the normal manual) purports to show how it works.
Image source: Casio VZ-1 service manual
Each of the four lines can be configured into "mix", "ring" or "phase" mode. The output of line A-C (or 3-1) is either fed to the output bus or fed into the next even operator via the "external phase" setting. So line A is either audible on its own, or it becomes a phase modulation input for operator M4. Line B is either heard or it becomes a phase modulation signal for M6. Same for line C and M8.
Through the "external phase" switches it is possible to create chains of up to 4 lines cascading into the last even operator.
Algorithms: practice
The manual mentions this nowhere, but if you create a cascade of lines with external phase modulation, then the operator frequencies of all the even operators are the same, and they can be controlled via the lowest even operator.
For example, if you cascade A into B and B into C, then operators M2, M4 and M6 all share the same frequency, which you can control by changing the settings of M2. The UI lets you change the frequency of M4 and M6 but nothing happens when you do that.
The operator frequency ratio is one of the fundamental parameters in phase modulation synthesis: it determines the sideband frequencies. (The other fundamental parameter is modulation index which determines the amplitude of the sidebands.) It is a big and surprising limitation if you cannot vary the frequency ratios. This also happens when a line is configured in "phase" mode (also called "internal phase") on the Casio: the operators get locked to the same frequency. And this also is not documented.
But wait, there is more. Imagine you have a cascade of three lines: A into B into C. Operator M4 in line B acts as a choke point for the signal coming out of line A: if M4 is off or has zero amplitude, the sound generated by M1 and M2 becomes irrelevant. This is what the diagram suggests and it is also what happens with DX7 phase modulation. If I turn off operator 4 in the DX7 algorithm below, then it does not matter what the frequency or amplitude of operators 5 and 6 is: their signal won't get past operator 4.
Image source: DX7 user manual
In reality, if you do the following on the Casio VZ-1:
- Start with INIT VOICE
- Enable "EXTERNAL PHASE" on line B and C
- Enable operator M1 and M6 and disable the rest
Signal flows from left to right. Operators M1 and M6 are enabled, all others are disabled.
You would expect to only hear M6, because M4 acts as a choke point for the signal from M1 and M4 is disabled. But that is not what you hear: you get a phase modulated sound instead of a pure sinewave, which you can also verify by changing the frequency of M1. How on earth is the signal from M1 getting past M4?
First I play 4 notes with operator M1 and M6 enabled, then with only M6 enabled. You can hear and see how the sound changes from a phase modulated sound with strong sidebands to almost a pure sinewave (with oddly some 4th harmonic distortion).
Casio is lying to us
Is my VZ-1 broken? Have I discovered an implementation quirk that nobody on the internet has ever complained about? No and no. My VZ-1 is not broken and on closer inspection at least 1 person on the internet is aware of this problem, and they figured it out for me! Digital synthesis expert acreil got roped into a Gearspace thread about the VZ-1 back in 2021. The discussion starts off not being very interesting until acreil shows up, who then repeatedly gets contradicted by someone who loudly says things that are wrong, and then to put that all to rest acreil finds the relevant Casio patent for the VZ series and drops the bomb that the VZ's don't do phase modulation at all. They do wave shaping.
Excuse me what now? Yes, pedantically wave shaping is phase modulation with a carrier frequency of 0Hz, but why would you call that phase modulation?
Here is a picture from the patent that shows what actually happens inside a single "line".
Image source: US patent 5040448A
Note how ω0t
is the phase of operator 0 and ω1t
is the phase of operator 1. In "internal phase" mode switch SW1 is up, SW2 is down and SW3 is right. The result is that the phase input of the "SIN ROM" of operator 1 is the output of operator 0. If this was phase modulation, the phase input would be the output of operator 0 plus ω1t
.
So if I use "internal phase" mode with operators M1 and M2, what really happens is that M2 becomes a wave shaper for M1. But the user manual and the user interface pretend (!!) that this is phase modulation, and you can for instance turn off M1 and hear the signal of M2. Which is an oscillator stuck at 0Hz. This is impossible because 0Hz is inaudible. acreil figured out for us what actually happens.
because the total output would be zero when the modulator output is zero, one modulator is always fixed to a minimum amplitude. That's M1 when M1 and M2 use phase modulation
So when I turn off M1 in the user interface and turn on M2, I actually hear M1 at a low volume through M2. Who gets it in their head that lying to the user like this is a good idea? acreil goes on to point out:
You can hear the waveform, pitch, etc. of that modulator even when it's muted.
Indeed. Take the following patch:
- Start with INIT VOICE
- Set line A to "PHASE" mode
- Turn on operator M2 and turn off all other operators
- Now vary the pitch and waveform of M1
In the recording you first hear me change the M1 waveform and then the M1 frequency. M1 is "exciting" the M2 wave shaper.
Why does this work? If you stay close enough to 0 then sin(x)≈x
. In other words if you don't drive a sine wave shaper hard enough to leave the linear region then you can't hear that it's there.
I think this also explains what happens in the experiment above. Because M6 is enabled, M2 is secretly enabled to act as an exciter for M6. The signal from M2 can only reach M6 by passing through M4 so the envelope of M4 is wide open even though M4 is muted in the user interface. Now when I enable M1 its output gets added to the excitation signal from M2, and ends up driving both the M4 and M6 wave shapers outside their linear region.
Wow.