Simulating the Casio VZ-1 in Pure Data
2025-09-30
The past month or two, I've been trying to simulate the sound of the Casio VZ-1 synthesizer in Pure Data. In this blog post I want to reflect on why I'm doing this and what I'm learning from it.
This is a companion piece for these recent Youtube videos of mine:
What is the Casio VZ-1?
The Casio VZ-1 is an obscure Japanese synthesizer from 1988. At the surface its capabilities look similar to those of the Yamaha DX7: it does funny stuff with sine waves to make interesting sounds. But if you look closer you see it is one big exercise in Yamaha patent avoidance so everything it does is somehow different from the DX family.
I made the fortunate mistake to buy one of these synths 2 years ago. I quickly grew frustrated with it and tried to sell it on on the second-hand market, but because it's so obscure and unloved, nobody wanted to buy it. After a while I came back to it and thought I'd sit down and finally figure out how it works. This proved to be over my head but at least I got to blog about my tribulations. Miraculously these blog posts got some attention on the internet, which led to contact with other people interested in this instrument. This is why I call it a fortunate mistake that I bought the VZ-1, because making new friends is worth more to me than any of the bleep bloop sounds I might get out of it.
What is Pure Data?
Pure Data (Pd for short) is a free open-source "patchable computer music environment for audio analysis, synthesis and digital signal processing in real time". In my own words I would say it is a computer program in which you draw austere looking spiderwebs that make sound.
A picture of a Pure Data patch I made.
If you are familiar with the world of computer music then Pd may remind you of Max. That is not a coincidence: Pd is a younger sibling of Max.
What does it mean to simulate the VZ-1 in Pure Data?
At one point in my ongoing quest to understand the Casio VZ-1, I realized that it would be useful to not just write in words about what the VZ-1 does but to also simulate it. Words are nice but the simulation makes sound, you can take it apart to see how it works, and you can improve on it if you want.
Some people simulate (or emulate) old equipment to give people the ability to achieve the same results without having access to the original machines. That is not what I am trying to do here. My goal is to better understand what the machine can do. In order to do that my simulation does not need to be 100% accurate, nor does it have to be complete.
The VZ-1 makes sound by shaping and combining the output of up to 8 oscillators, organized in 4 pairs. Pairs of oscillators can be configured in 3 different modes called MIX (additive synthesis), RING (ring modulation) and PHASE (wavefolding). On top of that the sound of oscillators 4, 6 and 8 can be replaced by the sound of the previous pair shaped through a wavefolder. Casio calls this "external phase" mode.
The underlying building blocks of this are phasors, sine wave tables, addition, multiplication, etc. All things that Pure Data can easily do as long as you can figure out what order to arrange the building blocks in.
What have you learned so far?
Pd is weird but it a good tool for this job. Because the VZ-1 is at heart a crude purely digital synthesizer, it is not very complex to simulate it. The difficulty is in getting the details right.
One of my first objectives was to find another way to explain to people what PHASE mode does. Many people seem to think it's the same as Yamaha DX7 FM. This is not the case, Casio's PHASE mode is sine wave folding. I have written about this and I have made videos about this. Now with Pure Data we also have an interactive explanation. You can see a demonstration here.
There is a good reason why people get confused about VZ-1 PHASE mode because the user manual does a very poor job of explaining what it does, and because the user interface of the machine seems to almost intentionally deceive you about what is going on. Naively, I always thought that this "poor manual and deceptive UI" problem was unique to PHASE mode, but in the past few weeks I have discovered that it also applies to RING mode.
There is a simple definition of what ring modulation is, namely to multiply the numerical values of two waveforms to create a new waveform. The VZ-1 indeed does this multiplication, but what they don't tell you is that in ring mode the machine also silently blends in some extra overtones to spice up the output of the ring modulator.
The simplest description of what actually happens in VZ-1 RING mode I can come up with is this:
When ring modulating oscillators 1 and 2, the VZ-1 blends in a second and third harmonic into the signal of oscillator 1. The third harmonic is at a fixed level but the level of the second harmonic depends on the level of oscillator 2.
Ring modulation of two sine waves with frequencies A and B gives you two new sine waves with frequency A+B and A-B, mixed together. So if your original sinewaves have frequencies 5 and 1, then the resulting frequencies are 5-1=4 and 5+1=6. On the VZ-1 however you also get frequencies 14 and 16 mixed in. The simplest explanation for the numbers 14 and 16 I could think of is that the synth secretly blends in the third harmonic of frequency 5, namely 15, and that frequency 15 gets ring-modulated with 1 resulting in 15±1 equals 14 and 16.
And then to make matters more confusing, under certain circumstances the synth also blends in the second harmonic of the first oscillator, which in this case would be 10, and after ring modulation that results in frequencies 9 and 11. You can watch my video if you want to know more. And if you have a better explanation please let me know, because I don't like how complicated this sounds.
VZ-1 RING mode overtone craziness. For more information watch the video.
What is next?
The next thing that I would like to figure out is how to accurately simulate the "external phase" mode of the VZ-1, i.e. repeated wave folding. The most difficult thing for me right now is to model the maximum wave folding depth. My goal is that any static sound (so not using envelopes or LFO's) you can make in the simulation you can also make on the VZ-1. I'm still not there yet: it keeps happening that I discover a cool sound in the Pd simulation that I then cannot create on the real machine.
I don't know if or when I will finally get there but so far it is a nice challenge to try.
Conclusion
Pd is weird but useful. The VZ-1 makes no sense but it makes for a nice ear puzzle.