VC-SPG (Voltage Controlled Signal Path Generator)



The VC-SPG is a programmable audiomatrix and a new device that uses the Ipson technology. The audiomatrix and the additional audio electronics create a powerful switching and mixing platform that introduces a new way of working. The interface can be directly programmed and driven by sending and receiving OSC-messages. Within the manual you will find all the basic information that you need to work and communicate with this interface. It will explain the use of the hardware and the additional software patch (Max/Msp). Once the 32 presets are uploaded to the local memory, it can sequence through these presets by means of external triggers and control voltages.

Download the user-manual and check the features.

difas model6 2  difas model2

 D mini 2


The VC-SPG is developed as part of the Sonology-Steim Instrument & Interfaces master research-project at the Royal Conservatory in The Hague (NL). This user-manual is a very compact summery of all the in’s and out’s, especially for those users who are going to test this SPG and share their feedback. The detailed content of this matrix setup can still change in detail as a part of firmware updates (assembly code within the microcontroller) and the software updates. Check the website for the latest versions.

The Max/Msp patch can be downloaded from the website. It is one way of working with the VC-SPG and probably not ideal for every user. So please feel free to rebuild the Max/Patch, modify it and create your own perfect way of switching. You can use any software package you like for that matter, as long as you use the right OSC-message format as described in the manual.

It all comes down to this:

 /pa<byte0><byte1…byte8> for direct switching
 /st <byte0><byte1…byte8> for storing presets
 /cf <byte0> for control and configuration

a100 difas patched

 The VC-SPG euro-rack model embedded in a Doepfer A-100 system


Open Sound Control (OSC) communication.

An OSC-message consists of three parts: an OSC address tag, an OSC type tag and the OSC argument(s). The communication between the computer and the VC-SPG is realized with OSC-messages. The figure below shows the generic OSC-message used for driving the matrix.

difas string


All OSC communication in general is realized with blocks of 4 bytes. In the example above you will notice the extra ‘zero’ after the address tag ‘/pa0’. This zero acts as a separator between the different tags and it completes the data-string to a multiple of 4. After the definition of the type tag consisting of nine integers (9xi), also two zero’s are added to complete the multiple of 4 and be the separation between the type-tag and the OSC arguments. Both the /pa and the /st string contain in total 9 integers [v0 - v8].

For the communication with the VC-SPG, the address-tag can have three different values:
/pa    This address-tag is used if the VC-SPG has to activate the new matrix value instantly. Pa is an abbreviation for ‘Patch’.
/st    For storage of a preset the message should begin with /st (storage).
/cf    This shorter osc-message, consisting only of one osc-argument is used to configure the VC-SPG and to start and stop the sequencing.

Open Sound Control (OSC) is a protocol for communication among computers, sound synthesizers, and other multimedia devices that are optimized for modern networking technology.
To be able to write different matrix presets or patches to the matrix, it is necessary to write all 256 bits every time the presets changes in order to get stable behavior - that’s the setup and the design philosophy of the Analog Devices AD75019 matrix chip.

matrix bit repr


The figure shows the build-up of the OSC-messages used to transfer presets, or patches, from your computer to the VC-SPG or vice versa.
The first byte of the OSC-message [byte1], is a 32-bit integer and it contains the matrix settings from X0/Y0 to X15/Y1. The next byte [byte2] contains X0/Y2 to X15/Y3. Notice the ‘Yx’ is increasing and that every byte always contains the settings from X0-X15.



The patch osc-message (/pa)
/pa [byte 0] [byte 1] … [byte 8]


The OSC string starting with ‘/pa’ (patch) is directly activated within the VC-SPG when it is received. It will instantly switch On/Off the corresponding switches in the matrix. The first byte [byte0] is an extra byte which does not contain switch information, but it can hold information to configure the VC-SPG.  Since version v85 (see chapter ‘What’s new’) this byte is empty for the /pa string. Byte 1 to byte 8 represent the 256 switches in the matrix. Take a look at the examples below.

Example 1
If you want to switch ON the X0 and Y0, you have to set the first bit of [byte1] to 1. This is actually the MSB (Most Siginificant Bit) of [byte1] This is switch X0/Y0. The last bit of [byte1] LSB or Least Significant Bit) represents X15/Y1.

pa string


Example 2
Switching on only Y15/X15 (this is the last bit in the row of in total 256 bits):


pa string 2


Store osc-message (/st)
/st [byte 0] [byte 1] … [byte 8]


If the presets have to be stored in local-memory for later use without the computer connected, the OSC message should start with ‘/st’ (store). If the VC-SPG receives the OSC-message with this address-tag, the matrix-preset represented by [byte1]-[byte8] will be stored in local-memory. The construction of these bytes is exactly the same as the /pa string. The first byte [byte0] determines to which location the preset will be stored, depending on the preset-id (see figure below). The first byte [byte0] also contains data that determines the amount (N) of presets that will be part of the local sequence. The remaining two bytes do not have a purpose (yet) and will be used for future development ideas.



 st string







Configuration osc-message (/cf)
/Cf [byte0]


The ‘/cf’ (configuration) is a single byte string and contains data to change the settings or configure the mode of the VC-SPG. The first prototypes are supported by physical switches to start and stop the sequence for example, or to make a choice between different timer sources. Since firmware version v85, the switches can still be used, but the configuration byte can also ‘set’ or ‘reset’ the same functions. It can actually override the switch settings.

The configuration osc message is shown below:

cf byte       



switch values


The figure shows the setup of the data byte [byte0] which defines the configuration. The 8 bits on the right (the LSB bits or Least Significant Bits) contain the switch values. The 16 bits in the middle contain the timer value and determines the sequence speed when the timing source is set to OSC. The 8 bits on the left (MSB or Most Significant Bits) contain the value N (ranging from 1 - 32). This variable sets the amount of presets of a sequence.




Max/Msp patch version 85.
Made with Max7.1


With the Max/Msp shown below, you can fully control all features of the VC-SPG and it will generate the osc-messages decsribed. You can download the patch here. More detailed information about the different models can found in the Usermanual.


patch v85 qr


1. The matrix. Clicking on the gray dots wil instantly send a /pa string to the VC-SPG, activating this connection. If a preset is created, this preset can be stored by shift-clicking on one of the locations in [2].
2. Preset banks. In this box the presets created in the matrix [1] can be stored. The preset can also be written to file or read from file. To create a physical connection, click on the right junctions in the matrix[1]. If the dots are lighting up in yellow, the connections are active and the preset can be stored. Storing a preset can be done by clicking on the right number preset box in [2] and hold down the shift key at the same time. When all presets are made and it is time to sequence through the different presets, select the right number (1-6) in box [2] and start the sequence with the start button in box [8].
3. Udpsend. The computer has to send the OSC-messages to the right ip-address and port. On the left side in box[3] the ip-address and port of the VC-SPG has to be filled in. The port number should be 10001.
4. Udpreceive. On the right side the receiving port is defined. Port 8000 will be set to receive OSC-messages from the VC-SPG, unless it is configured differently in the embedded webserver (see getting started).
5. Sequence from lists.  When you created presets, but you want to sequence through the presets in a specific order other than up/down, you should create and use lists. If the button ‘Seq List’ is active (green, or blue) the OSC sequence start/stop [9] will sequence from the list [5]. In this list presets-id’s are written from the selected bank at [2]. Before the list can be sequenced, the list should be ‘pushed’ or activiated (red/black button).
6. OSC visual feedback. This part of the patch shows the incoming OSC-messages from the VC-SPG in order to have (visual) feedback. Whether the VC-SPG will send OSC messages back to the computer depends on the settings of the switches or the settings of the controls explained at [6]. When the ‘print Max’ switch is turned on, the patch will print the vales that are send to the VC-SPG in the max-window. This option is for controlling or testing purposes only - it will slow down the total performance of the Max patch considerably.
7. Configure VC-SPG. This part of the patch controls the configuration. The switches in this box replacing the physical switches on the different models. The biggest button on top start/stops the local sequence. The following options can be chosen going down in the patch: Internal or external trigger; Only positive or both positive and negative flank reaction for external trigger; Internal normal sequence (up/down) or ext. cv-sequence; At normal sequence up or down; The source for the speed (timing) from OSC (the patch) or from ext. Cv-speed; The last one is switching On/Off the OSC-feedback.
8. Uploading presets to the VC-SPG. This box sends the /st OSC-message in order to store the presets in local memory. When the big cross (upload to VC-SPG) is clicked, the active preset bank, selected at [2], will be uploaded. The rest of the variables shown in this box [7] generate a new /cf OSC-message changing the timer and the amount of presets (N) of the sequence.
9. OSC-sequence. This part starts or stops the OSC-sequence. If it is active the patch sends /pa OSC-messages at variable speeds and it sequences through the selected preset-bank [2]. The speed and the amount of presets of the sequence (N) can be set as well. To offer more variation a choice of Up/Down, Pendulum (up and down) or ‘Urn’ are offered. This last option ‘Urn’ sequences through a set of presets (bank) in random order, but will use all the presets at least one time before starting with the next round.



The VC-SPG needs +15V (120mA), -15V(120mA), +5V(250mA) and GND. The power supply should be part of the system and I used the ‘Traco-Power TML 15515’ for the power-supply. The euro-rack version (VC-SPG model 6) can be connected to the power supply of the Doepfer A-100 system.

Inputs and outputs
The matrix, the AD75019 from Analog Devices, can switch audio signals between -12V and +12V. Higher values will cause distortion. The opamps (NE5532 and TL072) are working on the same power-rail from -12V to +12V.

Control voltages general:
In the inside of the VC-SPG all digital signals are +5V or 0V. Also the PIC18F2523 microcontroller with its Analog to Digital convertor (ADC) can only handle 0-5V. Since there are a lot of different standars regarding the control voltages and modulair synth’s, the VC-SPG models have some modifications on board to re-scale these values to the appropriate values.

CV input model 2, model 3 and model 6 (euro-rack):
These inputs can take -5V to +5V on the CV input. This is the audio standard from Doepfer (A-100 set). The value will be re-scaled internally from 0 to 5V.
Trigger input model 2, model 3 and model 6 (euro-rack):
This input can handle 0-12V. The value will be re-scaled from 0 to 5V.

Max/Msp patch
The Max/Msp patch can be downloaded from
The patch is created with Max/Msp version 7.1