S-Poly connections are used by many Adroit modules to send multiple signals down a single cable.
They use the same user interface as regular Voltage Modular polyphonic connections so appear to behave exactly the same but there is one important difference. Regular Poly connections do not transmit 16 signals all the time. Instead they are limited to the NUMBER OF VOICES polyphony setting in Voltage Modular.
So if you set the number of voices to four then regular Poly connections are only able to send four signals. Effectively the excess “wires” are cut behind the panel which makes regular Poly connections useless for applications that require all 16 wires to work reliably.
So Adroit uses a technology called S-Poly connections (short for Secure Polyphonic connections) that transmit all 16 signals all of the time regardless of the number of voices set by NUMBER OF VOICES.
S-Poly connections are discernible from regular Poly connections by a colored ring surrounding the socket.
S-Poly outputs have a blue ring.
S-Poly inputs have a green ring.
One limitation is that it’s not possible to have multiple S-Poly connections feeding into a single S-Poly input. But it is OK to have an S-Poly output feeding multiple S-Poly inputs. (So many to one bad. One to many good).
To help with problem solving, if you accidentally plug a regular Poly output into an S-Poly input or multiple S-Poly cables into an S-Poly input the colored ring will change from green to red to indicate an error.
Note that you can still use the Voltage Modular bus system to transmit S-Poly signals as they piggy-back on top of the regular polyphonic cable mechanism.
If you examine an S-Poly signal using the regular Poly To Mono module you will find that the only information contained in it is a strange voltage on channel 1. It has to be the case that only channel 1 carries any information because NUMBER OF VOICES can be set as low as 1 and the other 15 channels in the regular Poly signal then won’t work.
The voltage in channel 1 contains two pieces of information. An identifier for the particular S-Poly signal and a key (which acts rather like a password so that an S-Poly input can recognise if the signal it’s receiving is a valid S-Poly signal or an erroneously connected regular Poly signal.).
The actual 16 channels of information aren’t carried via the cable mechanism but are instead communicated behind the scenes using a shared memory mechanism but the result is that it looks as if the cable is carrying the information. The shared memory mechanism uses direct RAM access so there is no performance hit.
If you use the S-Poly To Mono module instead of the Poly To Mono module then you will get what looks like regular behaviour but with all 16 channels always working regardless of the setting of NUMBER OF VOICES.
Table of Contents
S-Poly applications
You will probably first encounter S-Poly connections when connecting the Song Control module to a Song Part module and then making subsequent connections between Song Part modules.
This is an example of using S-Poly to send multiple control signals between modules. It just simplifies things and saves you having to tediously patch multiple cables. Similar examples include linking Rhythm Sequencers to Melody Sequencers and Drum Sequencers to MIDI Drum Kit modules.
Other applications you will encounter are the use of S-Poly connections to transmit scales, chords and grooves between modules.
Scale and chord signals are interchangeable in LSSP as both use the same basic arrangement with the first channel carrying a voltage that indicates the number of additional channels used to carry pitch information.
So a three note chord will have channel 1 set to 3 volts and then channels 2, 3 and 4 will carry the pitch voltages for the three notes of the chord.
Similarly, scale signals use the first channel to indicate the number of notes in the scale and subsequent channels to specify their pitches. (Note this allows scales to use micro-tuning if required).
Groove signals are a little more complicated with each of the 16 channels encoding both micro-timing and dynamics (velocity offset) data.
How polyphony works in LSSP
Technical details aside we can think of an S-Poly cable as being just a special type of Poly cable. But there are broader differences between how polyphony works in LSSP and regular Voltage Modular applications.
In LSSP chords and scales are interchangeable and carried in a single cable. Channel 1 is a voltage representing the number of notes in the chord or scale and channels 2 through channel 16 carry the 1 V/Octave pitch control voltages.
So a C major chord in LSSP will have a signal like this…
Channel 1 | 3 volts |
Channel 2 | Control voltage for pitch C |
Channel 3 | Control voltage for pitch E |
Channel 4 | Control voltage for pitch G |
Regular Voltage Modular polyphonic signals are more complicated because they also carry gate signals and perform voice assignment. To do so two separate cables are required – one called Poly Pitch and one called Poly Gate. Also the NUMBER OF VOICES setting (shown in Voltage Modular’s I/O panel) affects how many channels are used.
In the simplest case with NUMBER OF VOICES set to 3 then a C major chord in regular Voltage Modular format might look like this…
Poly Pitch Channel 1 | Control voltage for pitch C |
Poly Pitch Channel 2 | Control voltage for pitch E |
Poly Pitch Channel 3 | Control voltage for pitch G |
Poly Gate Channel 1 | 5 volts |
Poly Gate Channel 2 | 5 volts |
Poly Gate Channel 3 | 5 volts |
Which is fairly straightforward, but let’s consider what we might get in a more realistic real-time scenario with NUMBER OF VOICES set to say 6 and after a few different notes or chords have been played…
Poly Pitch Channel 1 | Control voltage for previous pitch |
Poly Pitch Channel 2 | Control voltage for pitch E |
Poly Pitch Channel 3 | Control voltage for previous pitch |
Poly Pitch Channel 4 | Control voltage for pitch C |
Poly Pitch Channel 5 | Control voltage for pitch G |
Poly Pitch Channel 6 | Control voltage for previous pitch |
Poly Gate Channel 1 | 0 volts |
Poly Gate Channel 2 | 5 volts |
Poly Gate Channel 3 | 0 volts |
Poly Gate Channel 4 | 5 volts |
Poly Gate Channel 5 | 5 volts |
Poly Gate Channel 6 | 0 volts |
Note this is just one possible state, many other possibilities exist.
The reason for this complexity is that voice assignment is being performed dynamically and the exact result depends on the history of which notes have been played and in what order.
So you can see that the two signal systems are very different in nature. The Poly Pitch and Poly Gate connections work perfectly well in practice but in LSSP we don’t need the extra functionality of gate and voice assignment as LSSP generally operates in a more abstract realm, so S-Poly signals are used instead. This means only one cable is required to carry a chord or scale and everything is far simpler.
Turning S-Poly chord/scale signals into regular signals
Given that S-Poly chord/scale signals and regular Poly signals are so different and non-Adroit modules don’t understand S-Poly we need to perform conversions in order to do anything useful.
There are various techniques for doing this…
Rather than repeat information available elsewhere, links to various tutorials and workshops are provided below. Also note that the images here are only intended to illustrate the basic ideas so serve as hints rather than working patches. To see things working in practice follow the links to the tutorials and download the .voltagepreset files.
Using pitch quantization
A Pitch Adjuster module takes an S-Poly chord/scale signal and one or two regular 1 V/Octave control voltages and quantizes the control voltages so that they fit the S-Poly chord/scale.
This technique is used in LSSP 101 Tutorial 1 with the CV Sequencer outputs being quantized to fit in the Blues Scale.
In LSSP 101 Tutorial 3 a similar technique is used but a chord signal generated by a Progression module fed with some basic chords from the Diatonic Triads module is used instead of a scale.
In the Ninth Triangle workshop a fixed chord generated by the Chord module is used.
The Melody Sequencer offers more sophisticated control of pitch quantization. You can decide which individual notes in a melody are to be quantized to fit a chord, a scale, both or neither.
More information on pitch quantization using Melody Sequencer is available here.
Using arpeggiation
Arpeggiation breaks up a chord into its constituent notes. As the S-Poly chord signal is so simple in format, one way to access the pitches is simply to use an S-Poly To Mono module to extract the pitch voltages directly from channel 2, 3 etc.
This is a slightly crude method but works well enough when dealing with basic triads.
The London Crime Theme workshop illustrates how effective this simple technique can be.
Remember that channel 1 tells us how many notes there are. The pitch for the first note is therefore in channel 2, the pitch for the second note is in channel 3 and so on.
Converting to MIDI
The Chord Player module converts S-Poly chords into MIDI. The MIDI signal can then either be used to directly drive MIDI modules or converted to regular poly signals via the MIDI To Poly CV module.
This approach is covered in LSSP 101 Tutorial 4.
Other conversions
Use the S-Poly Adapters module to convert an S-Poly signal into a regular one and vice-versa.
But note that the S-Poly Adapters module does a simple one-to-one conversion so won’t magically convert S-Poly chord signals to a form suitable for polyphonic use with regular modules. As discussed above the Chord Player module is provided to convert S-Poly to MIDI and then you can convert MIDI to a pair of regular Poly Pitch and Poly Gate connections using the MIDI to Poly CV module.
Also note that when an S-Poly signal is converted to a regular Poly signal some connections will not work if Voltage Modular’s polyphony setting is set to less than 16 voices.
The Adroit S-Poly to Mono and Mono to S-Poly modules enable you to access all 16 channels individually. The connections are 64 bit and sample accurate so you can use them to transfer audio or control voltage signals with perfect fidelity.
These modules can be used to “teleport” multiple connections from one side of a large patch to the other in order to simplify wiring but perhaps their main utility is allowing you to create your own custom chords and scales.
Custom chords and scales
Note the section below is largely irrelevant now because it’s far easier to use the new Chord Memory module to achieve this kind of thing, but it’s been kept because it may be of technical interest for more advanced users who might want to do things like create custom microtonal scales or explore other techniques in generative patches.
Creating custom chords and scales is only possible in LSSP XL and is a fairly advanced technique but it is discussed here as it is so closely related to S-Poly connections.
You can safely skip the following if you are new to LSSP.
Here is an example of creating a custom C Minor triad voicing with the third and fifth raised two octaves above their regular position relative to the root.
Note that the Octaves module serves as a handy source for the 3 volt signal required to configure the chord as having 3 notes, as well as providing the two octave offset.
The Note Watcher module is used to confirm that the resulting chord voicing is the one we wanted to create.
You wouldn’t do this kind of thing very often in practice as the Inversion module provides a reasonable range of alternate chord voicings, but it illustrates the underlying mechanism.
Here is an example of a custom scale…
Note that the maximum voltage provided by the Octaves module is 5 volts so if you wanted to create a scale with say 9 notes you could use an alternative DC source or use a simple trick of patching both the 5V and 4V outputs from Octaves to input 1 of the Mono to S-Poly module in order to create a 9 volt signal to indicate that there are 9 notes in the scale.
It takes a bit of inventiveness but you can create just about any scale you like up to the 15 note limit of S-Poly scale signals.
As with the custom chord example this kind of thing isn’t something you would do very often but it demonstrates the mechanism.
One final example is deconstructing an existing chord signal and reconstructing it again.
This doesn’t actually do anything useful as it stands but you can hopefully see that you could manipulate the internal pitches of a chord signal using this technique. For instance adding small DC offsets to micro-tune individual notes or larger offsets to change octaves. Or adding small offsets from LFOs or envelope generators to create complex pitch motion inside the chord.
The same principle would of course work with scales too as the underlying format of chord and scale signals is identical.