Here is a link to a VCV rack clone of the Roland JX-8P synth. There are 3 other synths created by the same person on Patchstorage. Enjoy. This patch is made by milescosmo- but I have provided a link below:
How did you made the plates? Coding?
You can contact the creator on the link above. I am just the message spreader of synth goodness. These are NOT my patches. You mean the controls, they are part of the Patch master modules from Mindmeld.
I’m the guy who created the patch, and yep ady34 is right, I used the MindMeld PatchMaster modules to create the control panel
Welcome Philip to the wondrous world of VCV Rack. How long you been tinkering and mastering the rack?
I’ve only been using VCV for about 8 months, I have however been using synths for about 20 years. I love the flexibility of VCV and other similarly deep platforms like UVI Falcon. Name’s Miles btw, Philip is my surname
Sorry Miles [whoops], well u certainly know your way around a few great synths by the look of your patches.
I played around with the patch from @milescosmo for a while, and then decided to build my own patch from the ground up, trying to emulate all the remaining features of the JX-P8 (and PG-800).
I spend way to much time on this, especially for someone that does not play keys, and does not have a decent keyboard with after touch. That makes it kind of hard to test. But I believe I have succeeded emulating the features (though not necessarily the sound).
I added various missing features like:
- Cross modulation option (amplitude modulation with DC1 modulating DC2)
- Random sample and hold option for LFO
- Key following for VCF and both envelopes
- All the polyphony and unison options
- All the tuning options to simplify dialing in a tone:
- Octave selection for both DCO1 and DCO2
- +/- 1V in semitone increments for DCO1 and DCO2
- Fine tune +/- 1 semitone for DCO2
- Global fine tune
- Unison detune
- Mod wheel depth (for vibrato)
- After touch with assignment for vibrato, cutoff, or volume
- Ability to save tones (patches) via Stoermelder 8FACE
- I programmed in an approximation of the factory tones 1 - 32
- I’m sure there is more that I am forgetting.
Here is the actual pach:
JX8P Venom.vcv (78.4 KB)
Here is a snapshot of the Patch Master user interface:
And here is some documentation:
And finally a birds eye view of the entire patch:
Here are a some notes on the construction.
I swapped in the polyphonic Stabile for a low pass filter that will not self oscillate.
I also swapped in a Bogaudio 2 pole high pass filter to replace the 4 pole Surge filter
The key following is really tricky for the envelopes. I found the crude spec, but could not accurately emulate it because I could not find a polyphonic envelope generator with CV control of time that was precise. I think the Bogaudio is precise, but I could not figure out the formula (the CV is not linear). I gave up and put in a crude approximation.
I think the velocity dynamics options are close, except 1 and 3 have an exponential curve that is too pronounced. The curve should be much shallower, but I could not find a polyphonic VCA with exponential response where I could control the curve.
The polyphony options were a pain. I have a new Venom module in the pipeline that will greatly simplify the task.
To get the specs for the factory tones 1 through 32 I downloaded a dump of the tone bank, extracted the MIDI bytes and put them in a spread sheet where I could input formulas based on the Roland documentation. There are so many differences in my emulation, that the specs are not directly transferrable. But I think it at least gets me in the ball park.
There are sometimes nasty crackles with key presses that I think are related to the envelopes. I put in a high pass filter for fast slew limiter, and it helped with the gates, and some with the envelopes. But there is still something not right. I’m not sure how to improve this.
I would be grateful If someone could point me to a polyphonic VCA with CV controllable curve response (shallow exponential - if that is such a thing)
I also could use an ADSR with CV control where the timings are precise and the necessary CV is easily computed.
Lastly - it would be great if the programmed tones could be tweaked to sound more like the real thing (if possible)
Wow, awesome work. I’ll download the patch tomorrow and check out it out, sounds like you put in a lot of hours on this one. I’m glad someone picked up where I left off, I also spent many hours on it and was happy to give it a rest. Keen to give it a try
Excellent! Do let me know how you make out. Any suggestions on improvements are most welcome.
I have figured out how to make the dynamics velocity response curve for 1 and 3 more shallow - simply crossfade the raw velocity value with the exponential output from the VCA. The crossfade amount can be dialed to get the correct degree of curvature. That should make dynamics modes 1 and 3 much more playable.
Nice project! Reminds me on my early efforts to build an JX-8P in SynthEdit. This project eventually turned into the PG8X VST.
In my first attempts, I also started by connecting the stock-modules of SynthEdit to replicate the structure. But then, rather quickly, I realized that the standard modules in many cases did not do the job. Some details, could easily be fixed by lookup tables, which translates the parameter value into the control voltage. In some cases, these were quite non linear.
Another aspect is the pulse wave form, which is not the usual rectangular wave with a pulsewidth, which scales with the frequency, but more like short saw like pulse, where the pulse width actually remains the same independent of the pitch. You might be able to achieve this by pinging a fast envelope at audio rate.
As for the dynamics mappings, as far as I remember 1 was parabolic, 2 just linear and 3 parabolic with a offset. I can try to find the values.
Wow, thanks Martin! - interesting info.
I just downloaded and tried out your PG-8X VST - it is an amazing accomplishment, and works well within the VCV Host module. If anyone wants the JX-8P sound in VCV, I highly recommend you get Martin’s free VST plugin, and purchase the VCV Host plugin if you haven’t already.
I never would have known about the pulse wave with a constant width spike. I’ve seen multiple writeups with various descriptions, but all saying it is a traditional pulse/square wave with a duty cycle between 15 - 25%, depending on the source. That is profound difference. Given how your emulation is a stunning replica (based on videos and writeups that I have seen), I have to believe you are correct.
Another area of confusion is the Xmod feature. I’ve seen writeups stating or implying it is a frequency modulation. I also saw another writeup that claimed it was amplitude modulation, which is what I implemented (I offset DCO1 to be unipolar for use as an AM modulator). But I see in one of your forum posts that is ring modulation - another stunning difference.
Regarding dynamics - I saw the Roland documentation, and the picture describes the dynamics response curves pretty well. I think it is mode 1 that has the parabolic curve with offset, so that the minimum velocity still has significant volume. I’m sure my curve is not precise, but I think cross fading the exponential response with the linear response is good enough for what I am looking to do.
But a bunch of components in my emulation need serious calibration
- low pass filter cutoff range
- ADSR timings / range
- LFO and delay ranges
- Envelope keyboard follow curves. I see the documentation showing that mode 1 has the top key at twice the speed as the bottom key, and for 2 the double point is around halfway up the keyboard, and for 3 it is around 1/4 up. But I have no idea what the curve is like. I presume it is not linear.
I will try to take some crude measurements from your VST emulation and bring my emulation a little closer. But I won’t spend much more time on this. At this point it is mostly instructive for me in regard to sound design. It is amazing how a very limited number of basic/crude capabilities can be combined and calibrated to give an astonishing palette of sounds.
Maybe use SurgeXT EG x VCA? It is polyphonic and offers modulation of the envelope response curve all the way from linear to exponential via CV input (modx). It also offers modulation of the ADSR times/levels.
Funny you should post that. I was just looking at that module! Yes, it does look to have the polyphonic adjustable VCA response curve I was looking for, though I have a simple solution with the FADE module coupled with the exponential mode of the of the VCV VCA.
But more importantly the ADSR seems to be much closer to what the XJ-P8 supports, and it seems to be precise, so in theory I should be able to closely match the hardware specs.
Based on Martin’s emulation, the JX-P8 ranges from about 5ms to 39 seconds for attack.
The Surge ADSR ranges from 3.9 ms to 120 seconds.
So that looks very promising
About the JX8P Cross modulation, from a Roland article:
Travel back in time to the year 1985 to find out what makes the JX-8P so unique among the Roland polysynths and why it remains so beloved.
The first key to the unique timbres of the JX-8P lies in DCO-2’s Cross Mod section. There are three cross-modulation options. Number one is a hard sync, forcing DCO-2 to restart its cycle in line with DCO-1’s. Although there’s no pulse width modulation per se, one can approximate the effect with oscillator sync. Cross Mod 3 is a form of frequency modulation, with DCO-2 as the carrier and DCO-1 as the modulator. The difference here is Cross Mod 3 supports key tracking, allowing for complex tones like bells that track the keyboard. Cross Mod 2 is a combination of sync and cross mod, allowing for even more tonal variation.
For Cross Mod 3 you would need additional info on the relative frequencies of carrier and modulator (ratio) and about the kind of FM (e.g. linear, exponential, through zero and such…)
There is some misconception about the XMOD=3 settings. I also read before that it is described as a ‘kind of frequency modulation’. This is just wrong. XMOD 3 is a simply amplitude or ring modulation between the two oscillators. It differs from the ring modulation on some other synths (e.g. CS 80) as the modulator is not a fixed frequency source, but the other oscillator. Hence the nice tracking.
I’m still a bit confused as to whether your cross mod implementation uses ring modulation (bipolar/4 quadrant VCA), or amplitude modulation (unipolar/2 quadrant VCA).
It sounds more like AM to me - the original harmonic partials seem to be preserved and mixed in with new partials, a characteristic of AM. I ended up using AM in my patch.
I’ve got a new version of my emulator and posted it on Patch Storage. The Surge envelopes made a huge improvement. So did the change to the dynamics response curves for modes 1 and 3. The last significant change was mixing in some sine into the saw and square waves to give the fundamental pitch a bit more heft. I also mixed in a tiny bit of saw into the square.
I think on average my factory tones 1 through 32 now better emulate the original.
I don’t plan on making any other changes.
Yes, that is confusing. That’s why I wrote ring mod or amplitude modulation. In fact, it is something inbetween. If I calculate the output signal from:
Xout = X_carrier * (X_modulator + offset)
then, offset = 0 would be ring modulation, offset > max(abs(X_modulator)) would be pure amplitude. modulation.
In fact, in my emulation, the offset should be on the ‘amplitude modulation’ side. I never really checked whether the condition is fullfilled, as the signal of DCO2 goes through a HP filter before being used as modulator in the XMOD circuit.
I need to find some time to play around with your emulation. Looks like some nice work.
That is shocking, as the block diagram in the service manual shows the cross mod amp modulation occurring immediately after the DCOs within each voice, as part of each voice’s mixer. It shows the HPF near the end of the chain, after all 6 voices have been mixed into a single signal, and before the chorus.
I think calling it an HP filter is probably misleading here. I guess what they do is a DC blocker, i.e. a capacitor in the signal path.
See e.g.: [Roland JX 8P & PG 800 Service Manual : Free Download, Borrow, and Streaming : Internet Archive](service manual) to be more precise: C126/R107 in front of Q16.