Sunday, November 8, 2015

Korg Polysix with Velocity Sensitivity

In truth, a Korg Polysix has rather limited features.  But, because it is an analog synth, it is open to modifications.  And so I've dived in head first.  I've already added aftertouch and portamento, controllable detuning, sustain pedal, and Moog-style legato triggering.  My most recent modifications began a few weeks ago, when I decided that I wanted my Polysix be velocity sensitive.  After a bunch of explorations and trials, I've finally pulled together all of the pieces.  That's today's story.  But first, here's a demo!  (Note, the bass distorts my laptop speakers, too.  Go for headphones.)


The Pieces:  The addition of velocity sensitivity to my Polysix builds upon many of the previous mods that I've done.  The core enabler of this mod was the fact that I had already replaced the stock Polysix keybed (which does not transmit velocity information) with a new Fatar keybed that is both velocity and aftertouch sensitive.  It's sweet.  As shown below, in my modified Polysix, the data from the new keybed is fed to an Arduino Mega, which assigns each new note to one of the six voices in the Polysix.  To modulate that voice in response to the note's velocity, I also feed the velocity information to my new "Velocity Processor", which then does the actual velocity-based modulation.

My highly-modified Polysix.  The newly-added "Velocity Processor" is highlighted in yellow.

Velocity-Based Modulation:  So what kind of velocity sensitivity did I implement?  I chose to modulate the intensity of the filter envelope.  As you heard in the demo, the intensity of the filter opening and closing gives a strong sense of articulation and dynamics.  In a stock Polysix, the intensity is the same for all voices (as set by the "EG Int" knob).  My goal was to dynamically change the envelope intensity based on how hard I hit the key.  As shown below, I chose to attenuate the filter envelope based on the note velocity.  At maximum velocity (MIDI 127), the envelope would be at its full intensity (as set by the "EG Int" knob, as before).  At lower velocity values, the intensity would be progressively smaller.  As a result, notes that I press hard should have a strong intensity and notes that I press lightly will soft intensity.


Scaling the VCF Envelope Based on the Note Velocity

Hardware Approach: After studying the Polysix schematic, and after figuring out how the VCF envelope multiplexing and how its associated addressing and synchronization works, I settled on the plan that I would manipulate the VCF envelopes in the multiplexed portion of its circuit.  Being multiplexed, I only have one signal line to manipulate, instead of six individual signals (one for each voice).  Sure, the signal on that one multiplexed line is changing very quickly (all six envelopes are time-sliced onto a single line), but I've already proved that a Teensy 3.1 plus a digital potentiometer can keep up just fine.  So, my hardware plan was settled -- I'd insert my Velcoity Processor right after the VCF Multiplexer (IC24) on the Polysix's KLM-366 PCB.


Building It:  In the Polysix, I was happy to see that IC24 is socketed, which means that you can pull out the chip and insert all sorts of fun new circuitry via the now-empty socket.  And so that's exactly what I did.  I took a piece of protoboard, soldered on the Teensy 3.1, the digipot, and IC24 itself.  More details on the build are here.  I then inserted the assembled protoboard into the empty IC24 socket.  As you can see below, it's not too pretty.  It's not complicated, it's just messy.  Someone with more experience would certainly do this more cleanly.

My "Velocity Processor" Installed in my Polysix.  Lots of wires.  Someone smarter than me could surely do it more cleanly.

Arduino and Teensy Software:  Hardware alone does not make this modification work.  I also needed to write some software.  For example, I needed to program the Teensy (my "Velocity Processor") to keep up with the multiplexing circuitry and to drive the digipot to properly attenuate the envelope signal.  I also needed to expand the programming on the Arduino Mega (my replacement for the Polysix's "Key Assigner CPU") to properly route the velocity data from the keybed to the Velocity Processor.  While this routing of the velocity data sounds straight-forward, the need to support the Arpeggitor modes made it more challenging (note that the velocity-sensitive arpeggiator leads to fun effects, like being able to make some notes feel accented...definitely a cool effect).  In the end, the software writing went pretty smoothly.  My latest code for both the Arduino and the Teensy are on my GitHub here.

First Trials and Tweaking:  Once I got it all wired up and programmed, I started to play it.  The velocity sensitivity really makes it more expressive.  Velocity sensitivity also quickly exposes bad keyboard technique!  I need practice!  But, even with my poor technique, I felt that the velocity response wasn't quite right.  So, I spent some time remapping the velocity values to create a custom response curve.  Furthermore, to get a good electric piano/clav sound, I felt that I needed a little grit and compression in the sound.  So, I added a drive circuit, which will be the subject of another post.

Playing It:  Once I got it adjusted to my liking, I've had a lot of fun adjusting all of my traditional Polysix patches to best include the velocity capability.  I started with the piano and clav sounds (as seen at the top of this post) because they our ears most expect velocity dynamics with these kinds of sound.  Interestingly, though, even organ sounds (which are traditionally not velocity sensitive) can benefit from velocity dynamics.  Hitting the keys a little harder, gives the organ more "pop!".  You can here it this little carnie organ vamp:


Moving Forward:  My next step is to continue to refine the interaction of the velocity with the other synth's features.  For example, I'd like a way to turn off the velocity sensitivity so that the EG Int will work as it does in a stock Polysix.  To do this, I simply need to wire up a switch, or re-purpose one of the switches already on the back of the synth.  Also, I need to further tweak (and then write-up!) my drive circuit.  It is critical for the velocity-sensitive piano/clav sounds, but I've found fun uses with other sounds, too.  Finally, I also want to improve how the velocity interacts with the Unison and Chord Mem modes of the synth.  It doesn't feel quite right yet.  So there's lot's to do!  But first, I've got some playing to do.  :)

Update: I tried adding diode-based distortion to add some grit to my EP/clav sounds...but I didn't like it very mcuh.

Update: I tried overdriving one of the Polysix's OTAs to add some grit and I liked it a lot!

8 comments:

  1. Almost surprised that the Kiwi mod doesn't even allow velocity via MIDI? I certainly would do this keyboard mod, but realize it's more DIY than something that could be bought?

    ReplyDelete
    Replies
    1. The Kiwi mod is sweet, but to make the synth velocity sensitive, you need more modifications than Kiwi does. It's these extra modifications to the circuitry that had to be figured out.

      What I showed here is one approach to adding velocity sensitivity. Maybe the Kiwi mod folks will incorporate this (or some other approach) in the future. That'd be great. I had fun just showing that it *could* be done.

      Hopefully someone else can package it into a form that would make it easy for others to do.

      Thanks for reading!

      Chip

      Delete
  2. Great project..Hay I have an issue with a Polysix and I wonder if you could point me in the right direction.

    I have a Korg Polysix which I do not know too much about but have a couple issues:

    First, I can get somewhat normal sounds, use programmer, change banks/presets, write to presets, use bend and mg wheels, use key assign mode, etc. I can get some cool fat synth and string sounds typical of this synth but something is not right.

    1) When I turn the CUTOFF dial, I get sort of a muffled warbly sound till 11 O'Clock then it clears up between 11 and 5 O'Clock (I suspect something is wrong with the Contour pot -or- something else in the signal chain...I have used Deoxit extensively on the pot and still have the issue). A gentleman who was looking to buy it said he thought it might be more than a deoxit fix as it seem more like a muffled warbly sound rather than a typical scratchy pot.

    2) The attack pot, resonance pot and (maybe the speed intensity pot) seem to have some of the same symptoms but not as obvious as the cutoff pot. Hard to tell as I don't as so many things on a synth are interdependent and not sure what affects what exactly and how they should behave exactly.

    Any ideas?

    Like I said, I can use the presets and get a decent synth sound and most functions seem to work fine except the wave shaping (whatever you call it)...

    Note: There was a battery mod performed on the board, there was slight surface etching but apparently traces checked out (I assume as I am getting sounds and 80% normal function). Also all key contacts have been replaced.

    Could this be as simple as bad pots -or- is there an IC (one that affects countour resistor, cap (or maybe the board the pots all sit on) that I might need to look at?

    Love the synth and would love to get it to 100% but just a couple nagging issues.
    Thanks for any direction and help you can provide.

    ReplyDelete
    Replies
    1. For this kind of troubleshooting, the folks on the Polysix board at Yahoo Groups are super-duper helpful. You should definitely head over there, sign up, and ask for their help on these issues.

      https://groups.yahoo.com/neo/groups/polysix/info

      Chip

      Delete
  3. Fascinating! I have a Polysix in my pipeline; I might just have a hack at that. I'll check the Github stuff; I presume you have BoM and schematics to make it pretty much a 'follow the dots' recipe?

    Interesting to see how far the Polysix could be taken; I wonder how practical it would be to reengineer the KLM-366 board to make it a Polyeight...?

    ReplyDelete
  4. Hi! Great project! What fatar keybed did you use?

    ReplyDelete
  5. This comment has been removed by a blog administrator.

    ReplyDelete