Friday, July 11, 2014

Reviving M1000X

I've finally found the time to get Xcode going on my Mac Mini and rebuild M1000X, the program I published some years ago for doing patch editing on the Oberheim Matrix-6/6R and Matrix-1000.  It now runs on Intel Macs under OSX 10.8 (it should also work under 10.9, but I have not tried it).  There were some challenges involved in getting it going again.  (OSX coding geekdom ahead...)  I originally wrote M1000X in 2005 in pure C, using the Carbon libraries.  Apple in its infinite wisdom has since deprecated Carbon, and is pressing hard to get all remaining Carbon apps converted to use the Cocoa libraries.  Unfortunately, making a Carbon app written in C work with Cocoa involves a significant re-write, object-izing the code and reworking it into Objective-C.  Additionally, the current version of the interface builder built into Xcode refuses to open the Carbon nib files, although the runtime still works with them.  Fortunately, I still have my old PowerPC Mac up and running, so I was able to do the interface resource editing that I needed to do there and copy the nib file over to the Intel-based machine.  Additionally, due to a problem with the way that bit fields in structures are specified in C (a problem that the language has had since the original K&R specification in the early '80s), I had to re-write some large structures that handle patches in memory.  While I was at it, I took the opportunity to fix a couple of bugs, and to put code in to work around two bugs in the Matrix-1000 OS that I didn't become aware of until after I had released version 1.0.

Anyway, version 1.1 of M1000X is available here.  Just open the disk image file and drag the application to your Applications folder.  There is a help file in there and a set of release notes also.

So while we're here, this is a good place to talk about the Oberheim Matrix series of synths.  These consist of two groups -- the Matrix-12 series, and the Matrix-6 series.  The Matrix-12 series consists of two synths, the Matrix-12 and the Xpander, which basically is a "tabletop" Matrix-12 with no keyboard and half as many voices.  Both of these synths are now very expensive collectors' items, and they also don't have a lot in common with the Matrix-6 series, so I won't dwell on them further here.

The Matrix-6 series consists of the Matrix-6 itself, a 6-voice keyboard; the Matrix-6R, a rack-mount (2U) packaging of the Matrix-6, and the Matrix-1000, with the same voice architecture but more patch memory and some improvements, and packaged in a smaller (1U) rack-mount box.  All of these synths are based on the CEM 3396 "synth on a chip", which provides an all-analog signal path consisting of two DCOs, one low-pass VCF, one noise generator, and two VCAs.  The VCF can be FM'ed by one of the DCOs.  The synth adds to this a bevy of modulation and signal sources: two LFOs, three DADSR (delay-attack-decay-sustain-release) envelope generators, two ramp generators, and a tracking generator. The patch memory consists of 100 patches on the 6/6R.  The 1000 has 800 patches in ROM and 200 in RAM (hence the name).

The "matrix modulation" capability is what gives the synths their name.  A radically different idea at the time it was introduced, the modulation matrix is basically a virtual version of the old EMS pin matrix (which is displayed graphically by M1000X).  There are ten "pegs" that you can insert at any intersection in the matrix, and you can set the level (inverted or non-inverted) of signal to be routed from the selected input to the selected output.  All of the internal modulation generators are available as sources, as are external expression input jacks and MIDI continuous controllers.  Almost any parameter of the DCOs and VCF can be a matrix destination, as well as most of the envelope segments, the LFO rates and amplitudes, and the portamento rate.  It really did at the time help break out of some of the limitations of its contemporaries, which at the time usually had very limited signal routing -- for instance, on many synths there was one LFO that could only be routed to oscillator frequency, and maybe one other one that could only be routed to VCF cutoff or VCA level.

While the voice architecture is quite capable, the user interfaces for patch editing are limited.  The Matrix-6 and 6R both use the same mechanism, a membrane panel with three mode select buttons, a numeric keypad, and some forward and back buttons.  Visual output is by way of a one-line vacuum fluorescent display with 16-segment characters; it's bright and easy to read (except for some punctuation characters that come out looking funky in the 16-segment format), but it can only display 20 characters.  The display basically switches from display of patch numbers and names to displaying names and values of patch parameters, and patch editing is quite tedious.  As for the Matrix-1000... well, it has no patch editing controls at all.  Clearly there was a cost and packaging decision at some point (apparently Oberheim really wanted to get the Matrix-1000 crammed down to a 1U package).  The only thing you can do from the panel is select patches, set up MIDI, and change a few system parameters.  Output is limited to a 3-digit numeric LED display and a few status lights.  This is why you need an external editor. 

Yes, these are analog synths.  They do use DCOs, and some (most?) of the modulation signal generating is digital, but the audio signal path is all analog.  Oberheim produced many of these synths, and because of the limited user interface they are regarded as less desirable than many other analog synths, so they can be had at reasonable prices.  If you're looking to get into vintage analog inexpensively, this is a good way to do it -- get one of these synths, and then use M1000X to overcome the UI limitations.

Sunday, August 25, 2013

How the Korg Poly-800 DCO works

Back when I wrote an article here about how the digitally controlled oscillator (DCO) in the Roland Juno synths (the old analog ones, not the Juno-D series) works.  At the time, I had intended to also write something about how the DCO in the Korg Poly-800 (and its rack-mount sibling, the EX-800) works.  I had heard from several sources that it was quite a different design from the Juno DCO, but at the time I wasn't able to find any solid technical information.  And I don't actually own a Poly-800, so I didn't have a guinea pig to experiment on.  (Years and years ago, I tried one out in a music store, and to be honest I was not that impressed.  But back to the topic.)

Recently, I got interested in the topic again, and after a few days, I managed to finally uncover some documentation.  And yes, as it turns out, the Poly-800 DCO is quite different from the Juno.  It actually flirts with the line between "analog" and "digital" a lot more than the Juno DCO (which has a completely analog audio path) does.  And in some ways, it's more capable than the Juno DCO, but in other ways it's quite limited and just plain screwy.

Schematic Archaeology

A few months ago I went to the excellent FDISKC web site and downloaded a copy of the Poly-800 schematics.  I recall looking at this before and not being able to make much sense of it, and it doesn't help that it's a scanned copy of an original that was already in rather poor condition.  But this time, having read up a bit more on the synth's features and its patch programming options, I had a better idea of what to look for.  For those who have not encountered one: The Poly-800 is an eight-voice synth.  Its DCOs generate outputs in four octaves for each voice.  There are 16', 8', 4', and 2' octaves that can be turned on and off individually.  There are two choices of waveform (or so the synth likes to pretend; we'll talk about this later): square and sawtooth.  No pulse width modulation on the squares, and no triangle or sine.  The normal operating mode is a single DCO per voice, but the 800 can be put in a "double" mode wherein two DCOs are allocated to each voice, the penalty being that the synth is reduced to four voices.

When I looked over the schematics, I noticed an IC with the part number MSM5232.  It had two groups of outputs marked as being the four footages mentioned above.  Aha, I thought, that must be the IC that generates a voice, or possibly two voices.  I got to looking for some notation on the schematic that would explain that that part of the circuit was replicated some number of times (4 or 8 was what I expected), but I couldn't find any such.  Also, the IC looked like it was maybe some sort of processor; it had incoming address and data lines.  And then there were eight lines marked as "C1" through "C8".  I couldn't figure out what those were.  A bit of Web searching quickly uncovered that this part was once upon a time made by Oki Electric.  However, Oki Electric spun off its semiconductor business into a separate company some years ago; I think it may have been through several changes of hands since then, and in any event, Oki Semiconductor, if it still exists, doesn't seem to have a Web site.  So no going to the manufacturer for a data sheet.

I saw several mentions of the Poly-800 service manual having the data sheet, but I only turned up a couple of online sources for the manual, and they looked sketchy (they demanded that you disable your firewall and virus protection in order to download).  So no luck there.  After hours of searching, I finally found a several-years-old posting that had a pointer to an Italian site.  I crossed my fingers and clicked.  It was there!  And it explains a lot.  And now I know...

The Original Chiptunes Synth

The reason I couldn't find any block-replication notation on the schematics was that a single MSM5232 handles all eight DCOs.  As it turns out, the MSM5232 wasn't intended to be used in music synthesizers -- it was a tune chip for arcade video games.  It contains eight counters that divide down a pair of master clock inputs, and bit shifters that act like octave dividers and produce all of the different footages.  It also has a sort-of VCA for each voice, and a pair of onboard attack-sustain-release envelope generators.  What it does not have is filters, a problem that we'll get to later.

So here's how it works: Each DCO is, as stated above, has a counter-divider that is loaded with a value and then counts down every time the clock signal at the external clock input cycles.  When it reaches zero, it sends a reset pulse, and then its value gets reloaded again..  This much is similar to the Juno DCO.  On the Juno, each time the counter reaches zero, the pulse resets a fairly conventional sawtooth VCO core.  However, the 5232 has no VCO core.  Instead, it has a flip-flop that toggles its state on every counter reset -- which means that it is generating a square wave.  That's the only waveform it can produce. 

 Each DCO has a register into which the CPU places a note number when the DCO is to play a note, and a gate flag that turns the voice on and off.  The note number is used to look up a counter value from an internal ROM, which will be used to divide down the incoming clock frequency.  The flip-flop controlled by the counter drives a chain of octave dividers which generate the four footage outputs.  Basically, there is only one octave's worth of counter values, and it taps into the octave divider chain in different places for higher or lower octaves. 

So far so good.  Now here's where it begins to get screwy.  One would think that the logical way to output the voices from the chip would be to have each voice output on its own output pin.  That's not what it does.  The voices are divided into two groups, and for each group, all of the outputs of a given footage are mixed onto one output pin; for example, all of the 16' footages for voices 1 through 4 come out mixed on pin 28.  This answers a big question that is often asked about this synth: why does it use a paraphonic VCF?  Answer: because the 5232 doesn't make the individual voice outputs available.  The IC provides amplitude control over each voice, but not over the individual footages -- they can only be turned on or off, and the choice applies for all voices in a group.  There are two ASR envelope generators onboard, one for each group, but the Poly-800 does not use them.  Rather, it applies envelopes generated externally by the synth's CPU. These are input to the chip through eight input pins, one for each voice.  I don't think the chip really has VCAs -- I think that all it does is toggle back and forth between the current envelope level and ground, which produces the square wave of the desired amplitude. 

Each group of four voices is driven by its own external clock source.  The chip itself has no mechanism for any kind of pitch modulation, so pitch bend and envelope/LFO control over pitch have to be implemented external to the chip, by modulating the master clock frequencies.  Each group of four voices has its own master clock input. This is reflected in the Poly-800's architecture; if you put it in the "double" mode, it divides the two groups and drives them with clocks of different frequencies when detune is selected.

The drawing below shows the basic signal flows.  (To reduce drawing clutter, only 4 of the 8 voices are shown.)  Each voice consists of a note number register, a counter/divider, and four octave dividers.  To play a note, the synth chooses a voice, writes the desired note number into its note number register, and then sets a flag telling the voice to play.   The note number is used to look up the divide-down count in the ROM, which then goes to the counter/divider.  This divides down the master clock (not show) for the group that the voice is in (purple or green) and produces the top octave.  The four octave dividers then produce the four footages. 

 The Mysterious Sawtooth Wave and Alleged Walsh Functions

This leaves a big question: we've established in the MSM5232 is only capable of generating square waves.  But the Poly-800 provides a choice of square or sawtooth waveforms.  How does it do that?  You may have read something about the Poly-800 using a mathematical technique called "Walsh functions" to generate the sawtooth.  What's a Walsh function?  Well, you might know that the process called the "Fourier transform" breaks up a waveform into a set of sine waves that are mixed at different amplitudes.  Walsh functions are like the sine waves used in Fourier analysis: by adding together a set of Walsh functions at different frequencies and amplitudes, you can re-create an arbitrary waveform, within a certain bandwidth.  And that's what the Poly-800 does to approximate a sawtooth wave: it uses the four footages of square wave that the DCO produces to do the inverse Walsh transform equivalent.  When you have the "square" waveform selected for the DCOs, the four square-wave footages are mixed together in equal amounts before the composite signal goes to the filter.  However, when "sawtooth" is selected, the four footages get routed into an analog adder circuit that adds them in a proportion such that the output roughly resembles a sawtooth.  We say "roughly" because trying to do Walsh transforms with only four functions is about like trying to do additive synthesis with only four harmonics.  (Further, it's not true that all of the Walsh functions are square waves; only some of them are, and it takes a more complete set to do a good Walsh transform.)  Nonetheless, it does sort of produce a sawtooth wave.

I've still got a lot more digging to do into the schematic.  For one thing, I'd like to be able to identify how the source oscillator that produces the two clock signals for the 5232 works.  It's obviously not a crystal oscillator since it has to be variable in frequency to an extent.  It appears to be based on an LC-type resonant circuit, but that part of the schematic is in particularly bad shape and it's hard to read.  


Saturday, August 24, 2013

Statescape Wisconsin

So as I wrote in my last post, I've been looking for a while for a way to build a delay line that would allow the recirculating sound to interact with the sound being input in a way other than just being mixed together.  I have wanted to explore other ways in which the input sound could modify the sound looping through the line.  One thing I thought of was to build a delay line in which the input amplitude modulates the recirculating signal.  As you might know, for any pair of sine waves that are input to a form of amplitude modulation, the output will contain sine waves at two new frequencies which are the sum and difference of the frequencies of the two inputs.  If you use more complex waveforms, then each pair of component sines contained within the two input signals will produce sum and differences frequencies, which can produce a whole lot of partials in the output .  Here is a block diagram of what I had in mind:



The first question was how to actually build such a delay line, and for me the answer was obvious: my favorite softsynth-building environment, Csound.  I've coded up a number of delay lines in Csound previously, and the only big change here was to incorporate the amplitude modulation function into the feedback loop.  However, getting that to work the way I wanted proved to be more difficult than I though at first.  To illustrate why, I'll repeat the basic amplitude modulation calculation from my last post:

A = (IG + M) * C

where: M is the modulation signal, C is the carrier signal, IG is the initial gain for the carrier (or, to put it another way, the magnitude of the output when no modulation is present), and A is the amplitude-modulated output.  The problem here is the fact that when you first start up a delay line, it contains no signal.  As you can see in the equation, if the carrier C term is zero, there is no output. So obviously if the AM process is implemented with the delay line feedback as the C term, the sound building process can never get started because no AM output is ever generated. 

So I tried coding it the other way, treating the input signal as the carrier and the delay line feedback as the oscillation.  That solves the problem with the delay initially not containing anything; it gets filled with unmodified input signal until something starts wrapping back out of the line and amplitude-modulating with the input.  However, it creates another problem: there has to be an input signal present all the time.  Whenever there isn't, the AM output, and the signal getting fed back into the delay line, gets "blanked".  And that's bad because I've found that, when doing these long-period delay things, it pays to be sparse with the input; if you are playing notes into it all the time, it quickly gets too busy for the listener to make any sense of it.

I thought about going back to the first way, with the delay line feedback as the carrier, but with a software switch that would route unmodified input signal into the line whenever there was no output from the AM processing.  But what I wound up doing was simpler: I computed the modulation both ways and added the results.  This doesn't effect which frequencies are present in the output, only the relative levels.  For the purpose, I decided it was good enough.  And this had the advantage of not going silent whenever one signal or the other wasn't present.

Once that problem was solved, the next problem was to figure out what kind of input signals would produce interesting results.  I tried some standard synth things like PWM leads and pad sounds, and I found out right away that with those harmonically complex sounds, the results degenerated into a particularly nasty-sounding form of noise very quickly.  So I had to have something harmonically simpler.  For this purpose I chose the Kawai K5m additive synth.  This was sort of overkill, but it worked for the purpose.  I built one basic sound with only a few harmonics, and capable of having its harmonic content varied by use of the mod wheel

I ran into a few problems, including one that I never manged to solve.  The big one was a puzzling popping noise that appears at random times.  I still haven't figured this one out.  Also, I had some problem with subsonics appearing in the output.  To address both of these problems, I added a pair of two-pole Butterworth filters to the algorithm, a low pass and a high pass.  These didn't totally solve the popping problem, which you can still hear in places in the completed track.

As for the results: they were surprisingly musical.  The AM often added notes that I didn't play, and I was pleasantly surprised at how often the added overtones actually worked well with the notes that were played.  Keeping everything harmonically simple helps a lot.  There is a distorted sound that builds up when things get busy; it seems to be characteristic.  All in all, I was fairly pleased.  Now I have to think of what to do for the next delay line.

Listen to Wisconsin here.

And here is the Csound source code for the delay line:


; Basic stereophonic delay line

itimel      = 3.1       ; left channel delay time
itimer      = 4.2       ; right channel delay time
ifbl        = 1.7      ; left channel feedback (keep < 1)
ifbr        = 1.7      ; right channel feedback
kcutlo      init 20.0   ; hi-pass for damping subsonics
kcuthi      init 2500.0 ; low-pass for suppressing pops
imodindex   init 10
kleftch     init 3      ; channel # of left channel (right is assumed +1)

afbl        init 0
afbr        init 0

; Get input audio
ainl, ainr  inch kleftch, kleftch+1

; Scale values to -1..+1 range needed by formula
ainlscaled = ainl / 0dbfs
ainrscaled = ainr / 0dbfs
afblscaled = afbl / 0dbfs
afbrscaled = afbr / 0dbfs

; Compute with feedback as carrier and input as modulation, and rescale
amodinl = (1 + imodindex * ainlscaled) * afblscaled * 0dbfs / 2
amodinl butterhp amodinl, kcutlo
amodinl butterlp amodinl, kcuthi
amodinr = (1 + imodindex * ainrscaled) * afbrscaled * 0dbfs / 2
amodinr butterhp amodinr, kcutlo
amodinr butterlp amodinr, kcuthi

; Compute with input as carrier and feedback as modulation, and rescale
amodfbl = (1 + imodindex * afblscaled) * ainlscaled * 0dbfs / 2
amodfbl butterhp amodfbl, kcutlo
amodfbl butterlp amodfbl, kcuthi
amodfbr = (1 + imodindex * afbrscaled) * ainlscaled * 0dbfs / 2
amodfbr butterhp amodfbr, kcutlo
amodfbr butterlp amodfbr, kcuthi

; Push samples through the left and right delay lines
aoutl       delay amodinl+amodfbl, itimel
aoutr       delay amodinr+amodfbr, itimer

; Output direct + delayed audio
            outch kleftch, (ainl+aoutl)*2
            outch kleftch+1, (ainr+aoutr)*2

; Compute feedback for next cycle
afbl        = aoutl * ifbl
afbr        = aoutr * ifbr

endin

Wednesday, August 7, 2013

Amplitude Modulation

I've got a new Statescape to post this weekend.  It relies heavily on amplitude modulation, as I'll explain in the post when I post it.  However, before I do that, I figured this would be a good time to dig into what amplitude modulation is, how it works, and what can be done with it.

So what is amplitude modulation?  Quite simply, it is what you are doing when you feed an LFO or other signal into the control input of a VCA: the amplitude of one signal (the control signal) is modulating the amplitude of another signal (the audio input to the VCA).  We do this all the time without thinking about it as "AM" as such.  However, most of the time, when we do this we are using very slow control signals -- well below audio frequencies.  Because of this, we don't usually hear the spectral artifacts that AM creates.  If we hear them at all, we hear them as a beating or phasing effect rather than as a separate tone.

However, we can use an audio-frequency signal as the carrier.  When we do, we find that we no longer hear the modulation as a variation of the output level of the carrier; what we hear instead is the carrier with the addition of "sideband" tones generated by the AM process.  Consider the simple case where the carrier and modulation are both sine waves.  What will be heard as the output of the AM process are three tones: a tone at the carrier frequency, and two sideband tones having frequencies which are, if the carrier frequency is CF and the modulation frequency is MF:

CF + MF
CF - MF

So if the carrier frequency is, say, 500 Hz, and the modulation frequency is 220 Hz, the two added tones will come out at 280 Hz and 720 Hz.  Obviously, these frequencies are not harmonically related to the carrier signal or to each other.  Such will usually be the case with AM; the generated tones will be inharmonic more often than not.  The audible effect is to produce sounds that are often described as bell-like, percussive, noisy, or just plain weird.  If the carrier and/or modulation are more complex signals with many harmonic overtones, each harmonic of the carrier will play off of each harmonic of the modulation and generate a pair of sideband tones.  The result becomes cluttered pretty quickly, which is why, when playing with AM, it is often better to start with harmonically simpler signals

(What, you might ask, happens if the carrier frequency is 220 Hz and the modulation is 500 Hz?  Well, the "negative frequency" values become aliased -- they come out as real tones, but with opposite phase.  In this example, we'd get a "real" frequency of 720 Hz and a "negative" frequency of -280 Hz.  The 280 Hz sideband will in fact be there, but it will have the opposite phase that it would have in the first example.)

In a conventional AM setup (as would be used by a radio station broadcasting an AM signal), an initial gain is assigned to the carrier and the modulation varies this gain by being added to or subtracted from it.  The sum or difference of the modulation and the initial gain is what modulates the carrier.  The effect of this is to set the output level of the carrier when there is no modulation.  The instantaneous value of the modulation increases or decreases the initial gain, depending on how the modulation wiring is set up.  Ring modulation is actually just a special case of amplitude modulation, in which the initial gain of the carrier is zero.  Those who have played with a proper ring modulator (one that has both carrier and modulation inputs) know that if you don't put anything into the modulation input, you get nothing out.  This is why.

The basic amplitude modulation equation is:

A = (IG + M) * C

where: M is the modulation signal, C is the carrier signal, IG is the initial gain for the carrier (or, to put it another way, the magnitude of the output when no modulation is present), and A is the amplitude-modulated output.   The multiplying of the carrier and modulation signals is a characteristic of all amplitude modulation methods.  Don't confuse this with the effect in the frequency domain (where the frequencies are added, as discussed above); in the time domain, the signals multiply.  As you can see, if the initial gain is zero, the computation reduces to a straight multiplication of the two signals, which is what ring modulation is.  You can also see another characteristic of ring modulation: the carrier and the modulation are interchangeable; switching the two inputs of a proper ring modulator will produce the same result. 

Amplitude modulation can be easily accomplished in both the analog and digital domains.  In the digital world, if you have access to something that allows you to run formulas on samples, like Csound or Max/MSP, it's pretty easy as shown by the above equation.  In the analog domain, you need a "four quadrant" VCA or a ring modulator.  With the latter, you can set the initial gain (if desired) by using a voltage source and adding it to the modulation with a DC-enabled mixer.  (Note: This may not work with a diode-ring-type ring modulation circuit.  I don't have one to try it with, so I don't know.  It should work with most any four-quadrant VCA.)  Because of the creation of the inharmonic sideband tones, you want to keep the signals you use harmonically simple, because complex waveforms tend to deteriorate into undifferentiated noise pretty quickly.  Also be prepared to do some low-pass filtering to get rid of any excessively high frequency tones that are generated.

Wednesday, March 6, 2013

48 ribbon controllers under your fingers

I'm always on the lookout for unconventional keyboards and alternate controllers.  Today, I came across the Evo keyboard from Endeavour of Germany.  This is basically a keyboard with a mini ribbon controller built into each key -- the main body of the key, with the exception of the very end closest to the player, contains a short length of position-sensitive capacitive material which can generate a digital control signal based on where it is touched.  Here's a photo, appropriated from Endeavour's Web site:
It may not be obvious from the photo, but the keys are longer and a bit wider than normal, in order to have sufficient room for the sensors.  Each sensor is 4 cm, or a bit more than 1.5" long, and is set back from the near end of the key by 1 cm.  Note the absence of conventional pitch or mod wheels.  The software that comes with the Evo allows you to map the sensor on each key to a different controller; for example, the low C key could be pitch bend, the D key modulation, the E key master volume, and so on.  The key doesn't actually have to be pressed in order to activate the sensor, which raises some interesting possibilities.  One mentioned Endeavour's Web site would be using the keyboard as a control surface for a mixer, by mapping a group of key sensors to faders.

The Evo keyboard itself does not generate MIDI data directly; it uses a protocol that is proprietary to Endeavour.  It must be connected to a computer in order to function.  The interconnect is not USB, as one might expect; it is -- surprise -- 10baseT Ethernet.  This is actually a very cool idea, and I've been wondering if/when the day would come when a lot of electronic instruments and controllers would use Ethernet for interconnect.  Ethernet hardware is pretty cheap these days, and it doesn't have a lot of the limitations that USB has, e.g., 100m length limit for Ethernet vs. 10 feet for USB.  And Ethernet has far more than enough bandwidth for the application.

What if you want to control a MIDI synth with it?  There is a software package that you can download from Endeavour that maps control messages from the Evo to MIDI messages.  An interesting feature of this software is that you can play a chord, of up to 16 notes, and it will transmit each note on a separate MIDI channel -- the so-called "Mode 3" or "guitar mode" method of sending MIDI information.  The nice thing about this is that it allows control information to be note-specific if desired; for instance, if the sensors are mapped to pitch bend, then sliding one finger will send MIDI pitch wheel messages only over the one channel assigned to that note, and only that note will bend.  Of course, to make this work, you have to be controlling a synth which is 16-part multitimbral.

There's also a virtual analog synth plug-in available, and a driver that allows the Evo to interface to Max/MSP.  The VA synth is pretty conventional, other than having specific controls for the Evo sensors.  The software is available for OSX and Windows; not sure which versions.

The question that has to be asked at this point is: how is this an improvement over polyphonic aftertouch?  That's particularly relevant since CME just introduced a controller with poly aftertouch that lists for $99 USD.  Yes, it has mini keys with limited travel, and they probably feel like cheap plastic.  But at that price, you can afford to buy one and only use it for parts where you need poly aftertouch.  And some good MIDI remapping software will let you do a lot of the tricks that the EVO MIDI interface software does (although probably not the mode 3 trick).  And many modern synths, both hardware and software, will accept and process poly aftertouch messages even if they can't generate them.  So what does the Evo offer over that?  Well, for one thing, many players who have worked with poly aftertouch have found it difficult to actually control in the heat of the moment.  The extension of fingers over the Evo sensors should be easier (thumbs, not so much, but...).  Second, the Evo sensors can be, as noted, used without actually playing the key in question, which provides a lot of additional flexibility.  And third, the Evo allows the sensors to be used in the "first touch" mode a la the ribbon controller on the CS80, where the place where the finger originally touches the sensor sets the zero point for subsequent movement.  Can't do that with poly aftertouch.

Endeavour sells two versions of the Evo, a two-octave (24 keys, C to B) and a four-octave, 48-key version.  The lack of a high C is probably because a conventional high C requires a unique key shape, which would be a significant additional cost on this keyboard.  There are a few questions not answered on the Web site, such as how the unit is powered: it doesn't say if it comes with its own power supply, or if it expects power over Ethernet.  It does say that the Ethernet should be self-configuring.  I think that it relies on the unit being plugged in to a network with a router or something else that will act as a DHCP server, so that the Evo can obtain an IP address automatically.  (There is a way to set it manually if needed.)  The only manual I could find was in German, which didn't help me much; the Web site states that the manuals are being translated, but the availability date it gives was last November.  It doesn't do wireless (which would have been an interesting addition, especially for live performance), so you will need an Ethernet router or hub with an available RJ45 jack. 

So this is a new take on per-note parameter control, and a pretty interesting one.  There is a video demo on Evolution's Web site, but in my opinion it doesn't do a very good job of showing the Evo's unique capabilities.  The Evo isn't cheap but the cost is actually not bad compared to a lot of other alternative controllers that I've come across.  Is it worth the price?  You decide.  The two-octave version of the Evo markets for E499 and the four-octave version for E999; that's about $650 and $1300 USD, respectively. 

Tuesday, February 5, 2013

SSL Double Deka -- full review


Geez, only eight posts last year?  I've got to do better than that.  I'll kick off 2013 with a full review of the SSL Model 1130 Double Deka VCO that I previewed last year.  Now that I've finally had some time to experiment with it, I've got some audio clips to share.  And a photo of the thing, finally powered up:


First of all: I mis-stated and grossly over-complicated the theory of operation in my preview article.  Here's what the Double Deka basically does: Use a bank of sliders to draw a waveform, and the Double Deka reproduces that waveform, more or less.  That's it.  How it actually does it is rather complex -- there's a VCO that runs at ultrasonic frequencies, and it steps from one slider to the next on each cycle.  By doing so, it re-creates a waveform that looks on the scope like the shape that you created with the sliders.  

Now, some background: The Double Deka is a design created by renown module designer Ian Fritz.  The 1130 is a further development of the basic design, which adds some new features and also re-formats the module into the Dotcom module format.  (A photo of the older version can be seen on the Bridechamber web site here.)  My 1130 is from SSL's second production run, from late 2012; this run fixes a circuit bug that the original run had which prevented the sync input from working properly.  The 1130 mounts in a standard Dotcom-format case and has the standard Dotcom 6-pin MTA-100 power connector.  It's a large module, 4U wide. 

Creating Waveforms with the Double Deka

The first thing everyone notices about the 1130 is the cool lighted sliders.  The two banks of green sliders generate two waveforms, each driven by the master VCO.  The orange sliders select which octave each bank operates in, using a deviously clever method that will be explained later.  You create a waveform by "drawing" it with the sliders.  As a simple example, here is a sawtooth wave set up in the A bank of sliders (the B bank is not used in this example):


And here is the resulting waveform, as captured using the oscilloscope tool in MOTU CueMix:

 

 Similarly, here are the sliders set for a narrow pulse wave:


And here is the resulting waveform:


You'll notice that there is some sagging present in the waveform.  The 1130 has a switch that can be used to select AC or DC output; when the switch is in the AC position, DC is filtered out.  As it happens, the tops and bottoms of a square or pulse waveform look like DC to the filter; hence the tendency for the waveform to drift towards the axis when it should, in theory, be perfectly horizontal.  I did try capturing some waveforms with the switch set to DC, and I still saw sagging, although not as much.  However, I suspect that my recording chain (MOTM-890, Mackie mixer, MOTU 828 Mk III Hybrid) is not DC-continuous, so that could account for that.  I have not tried putting an actual scope on the output -- I might do that next.

Here's a triangle wave, with the sliders:


And the resulting waveform:


Notice that in this one, and the sawtooth wave from above, the stair-step nature of the waveforms.  Obviously, ten sliders is nowhere near enough to do a high-resolution waveform.  The Double Deka isn't intended to be a wavetable oscillator; it's intended to be a device that allows experimenting with waveforms and creating a variety of waveforms, from a somewhat restricted set, on the fly.  The stair-stepping does have some implications for the sound, which I'll talk about in a bit. 

And finally, we have a waveform resulting from some random slider settings.  I didn't photograph the panel for this one, but you get the idea from the resulting waveform:

 

So what do these waveforms sound like?  Here is an audio clip, containing five waveforms in this order: square, sawtooth, triangle, pulse, and random slider settings.  I didn't try to record a sine wave because I couldn't set the sliders precisely enough to come up with anything that sounded remotely like a sine.


You'll notice that there's a certain tonal flavor that is common to all of the waveforms.  That, I think, is due to the stair-stepping between slider values; it tends to impose an odd-harmonic structure on all of the waveforms that are output.  I was able to get rid of that tone by running the output through a lag processor.  Linear slew limiting might be even better, but it's hard to do in analog circuitry; I'll have to play with coding it up in Csound and running the 1130's output through it.  I thought at first that a built-in lag processor, or lowpass filter that could be offset according to the frequency, might have been a useful addition.  Then again, there's already a ton of circuitry crammed into this module, and not much room for any more jacks or controls.  And there is such a huge variety of lowpass filters available on the market that I realized it would not make sense to incorporate one into the DoubleDeka itself.  Instead, leaving that choice to the performer makes sense.

I've found that there seems to be a bit of the unexpected in how the sliders interact with the processor.  I'm not sure what it actually is.  The first thing I noticed: if you set all ten sliders to the zero value, you would expect to get silence.  Instead, there is a low-level buzzing noise.  I wanted to see what this looked like on the scope display, so I cranked the gain way up at my mixer, and got this:


It's a digital-type noise that seems to be impossible to totally get rid of.  Where does that come from?  Is it something to do with the calibration of the sliders?  I don't know.  Another thing I noticed, possibly related to this, is that all of the sliders don't seem to behave in the exact same way.  For example, on the A bank, if you set all the sliders to zero and then set the first (leftmost) slider in the bank all the way up, you get what you'd expect -- the sound of a narrow pulse wave.  However, if you zero all the sliders and then turn the second slider way up, there's something of a difference: a prominent third harmonic that doesn't seem to show up on the scope, but you can hear it.  Other sliders in the bank did one or the other to varying degrees.  In the B bank, the same thing happens, but on different sliders.  

Exploring the Panel

Anyway, let's move on to explore some of the other features of the 1130.   And there are a lot of features here.  Getting past the obvious: At the upper left are knobs for coarse and fine tune.  These control the base frequency of the VCO and hence the frequency, modulo octave settings, of both banks of sliders.  (It would have been cool if there were a way to offset the frequency of the B bank from the A bank, but that would have required  a second VCO.)  If you move the coarse tune knob slowly, it steps audibly; I'd say about 1/8 tone (25 cents) per step. This is the price to be paid for having a coarse tune control with a very wide range.  The range of the fine tune control is about eight half steps. 

The two slider banks each have an individual output, and then there is also an output for the mix of the two.  There is a knob for controlling the mix, and also a control voltage (CV) input.  With the knob full counterclockwise and no CV connected, the output is A only; at full clockwise on the knob the output is B only; in between the two are mixed.  (Minor quibble: This knob should have been indexed on the panel with values ranging from -5 to +5, or some such, rather than 0-10 which is a bit confusing for a cross-mix control.)  A positive voltage into the CV jack moves the mix more towards the B bank.  This is one of the features added in this new version of the Double Deka that was not present in Ian Fritz's original design.

Here is a sound clip that illustrates using the mix CV to vary the mix between the A and B slider banks:


Octave Selection and Control

Each bank has a slider that allows selection of one of six octaves.  Twiddling the octave sliders, one notices right away that they are not slide switches but linear potentiometers.  There is a reason for that: each bank also has a CV input for octave selection.  The CV is added to the slider setting and then the sum is quantized to determine what octave the bank should play in.  If you input a signal from an LFO into the CV input, and then move the slider up and down, you find that the pattern of octave changes varies continuously as you move the slider.  That's why it isn't a slide switch: by careful setting of the slider, you can get sequences of octave changes that would not be achievable if the octave slider only had discrete values.  This is an addition to the original DoubleDeka design, and a very nice design feature.  Feeding low-audio-rate waveforms into the CV inputs can produce quite startling results.  Here is an example:


Modulation Options

This is an area where the 1130 really stands out.  The available modulation inputs are:
  • 1 volt/octave, standard scaling for playing the module in scale from a keyboard or a MIDI/CV interface.
  • Exponential FM, with a panel knob for controlling the ratio.
  • Linear FM, with a panel knob for controlling the ratio.
  • Sync input
  • "Ring" modulation input
The 1V/octave, expo FM, and linear FM inputs all do what you expect.  The available FM modulation index values are very high if you crank the knobs up.  The result tends to trend towards noise very quickly; I suspect this is another aspect of the stair-stepping in the output.  It's a harmonically rich output and applying FM to it creates harmonic chaos pretty quickly.  There is a a switch for the linear FM input that allows a DC-blocking filter to be switched in or out.  A linear FM example:

Linear FM

The "ring" modulation input is kind of strange, but also capable of doing some really neat things.  It isn't really a conventional ring modulation circuit.  Here's what it does: It "squares up" whatever input waveform is applied to the "ring" input jack, so the result is either "high" or "low".  When the result is "high", the output is cut off.  When the result is "low", the output passes through normally.  A consequence of this is that a sine wave, triangle wave, and sawtooth wave of the same frequency will have pretty much the same effect.  The most interesting results occur with pulse and multi-pulse waves at the ring input.  I created a patch with a Synthesizers.com Q106 VCO feeding the ring input from its pulse wave output, and an LFO driving its pulse width modulation across nearly the full range.  At one extreme, the output almost disappears, but at the other extreme you hear an un-modulated output for a moment. Ian calls this "digital ring modulation".  Here is a rather long example of the ring modulation, starting with a low-frequency modulation and then moving into audio frequencies.  Note how the modulation starts by simply cutting the audio in and out, and then begins to resemble more typical ring modulation as the modulation frequency increases:

Ring Modulation

The sync I haven't yet figured out.  There are two modes, a "harmonic" mode and an "aharmonic" mode.  There are some demos on Ian's web site, which I haven't yet managed to reproduce.  I'll post something about it later. 

Access to the VCO Core

The "HF Out" jack provides you with the raw waveform from the ultrasonic VCO core.  You could use this to, for example, feed an octave divider and generate additional waveforms that could be used to generate audio signals to be mixed with the DoubleDeka's outputs, or to do weird sync tricks.  (Don't run it directly to your amp -- it'll fry your speakers!)  It would have been nice if there were also an input that overrode the VCO core's signal to the A and B divider banks.  That would, for example, allow a second DoubleDeka to be slaved to the first, possible at some odd division of the first unit. 

Design and Contstruction

The 1130 appears to be well constructed.  The panel is of the same mechanical design and same thickness of aluminum that Synthesizers.com uses.  There are three circuit boards: one that carries all of the jacks, one that carries all of the sliders, and one that carries the VCO core and other circuitry.  The slider board has some surface-mount components on it; I didn't look closely to see what they are, but they are probably multiplexors for stepping through the sliders.  The VCO is tempco regulated, and trimmers for adjusting scale of the 1V/octave input, and high frequency compensation, are available.  I have so far not needed to touch the calibration.  The rotary pots are from Alpha and feel very nicely damped.  And I didn't have to re-index any of the knobs; they were all spot on.  Max depth from the back of the panel is 2.75", or slightly less than 7 cm.

The panel is well laid out despite being crammed with stuff.  I think this module wins the prize for most items on the panel -- 22 sliders, 5 pots, three toggle switches, and 12 jacks.  The area around the mix knob could get busy if you are using all of the A and B octave CV inputs and the mix CV input.  The A octave slider is a bit close to the coarse tune knob -- I bumped it a few times while tweaking that slider.  But these are all minor quibbles.  You might not think it's possible for a 4U width module's panel to be "full up", but this one is, and SSL did a fine job of laying out the panel so as to keep everything comfortable.  The panel graphics are the same as what Synthesizers.com uses, and the silkscreening is high quality.

Conclusions

You may have some doubts about whether you want to dedicate 4U of precious case space to one module.  In this case -- do it.  Everyone needs one of these; it's a great route to exploring and finding new timbres.  Use the modulations, apply generous amounts of low pass filtering, and will be pleased by the results.  I leave you with one more sound sample.  This is a pulse wave from a Synthesizers.com Q106 VCO being fed to the Double Deka's ring mod input.  The Q106 is being pulse-width-modulated by an asymmetrical sine wave from a Synth Tech MOTM-320 LFO.  The range of the LFO is such that at one end it drives the Q106's pulse width completely into cutoff, and at the end of each sweep the un-modulated waveform peeks out for a moment.

Noisy

And visit Ian Fritz's Double Deka page for more demos.  

Wednesday, November 28, 2012

SSL Double Deka VCO -- first look


This beast is the Synthetic Sound Labs Double Deka VCO, based on the original design by Ian Fritz.  SSL just completed a limited run, which was marketed through Muff's.  The module, as you can see, is a three-unit-wide module in Dotcom (aka MU) format.  It takes power through a standard Dotcom 6-pin MTA-100 connector.  

To be honest, I'm not yet fully up on how this beast actually works.  As I understand it, the VCO proper runs in the ultrasonic range (around 100 KHz, I think), and it divides that down to produce square waves of varying ratios, which can be mixed in inverted or non-inverted via the banks of sliders that feature so prominently on the panel.  There are actually two, but they share a set of frequency control voltage inputs -- 1V/octave, variable-ratio exponential, and linear inputs are all available.  There is an octave selector for each bank, and a mix control for mixing the two banks.  There are a bunch of other control voltage inputs that I'll detail in a review after I've had a bit more time with it.

Before it's installed, let's look at the back:


We see three boards: the large board taking up most of the surface area of the panel appears to be the "main" board; it has some surface mount, and most of the panel controls are mounted to it.  The long board at the bottom mainly carries I/O jacks.  The extension board sticking out from the right edge is show in a better view below:


Interestingly, this board appears to be carrying the actual VCO circuitry, since the tempco mounted to the expo-converting transistor array is obvious if you look closely (under the blue trim pot).  The power input connector is also here; you can see it as the white component at the left edge in this picture.  That location caused me a slight bit of trouble during installation since it's near the top edge, and I had to bend the power cable some to keep the top cover from pressing on it.  

So how does it sound?  Well, I've only had about 20 minutes so far... It's a VCO that has a lot of capability for generating various timbres.  Adjusting the sliders has so far been a trial-and-error process; I'm still trying to find the design documentation (which doesn't seem to be present on Ian's Web site at the moment).  So far what I've managed to do with random tweaking has been mostly pulse-sounding things, although I have hit a few times on combinations that had the effect of greatly emphasizing certain harmonics (particular the 2nd and 3rd).  The fact that you have two banks, and that the mix between them is voltage controllable, creates possibilities for morphing between three timbres: the A bank, the B bank, and the timbre that results when the two are mixed.  (You can get a lot of cancellation between them, to the point of the output almost disappearing with certain combinations.)

There are modes for syncing to an external oscillator, which I don't quite understand yet; the terminology used on the switch is not the standard hard/soft selections.  There are control voltage inputs for making the banks change octaves, and a "ring in" jack that I haven't quite figured out -- it doesn't seem to be ordinary ring modulation.  I'm thinking what it might do is square up the input signal and then XOR it against the output.  

I think it's going to be a good module to have and to work with.  By itself, it doesn't zingy outer-space sounds, although I did manage to get a few weird things with external modulation.  There's undoubtedly a lot more timbral capability in the slider banks than I've uncovered so far.  And SSL's service was great; it took a few months to build this batch, but once they were ready and I paid my balance, I received my module within a week.  One minor complaint: no power cable was included.  Not a big deal to me since I have the tools to make my own.  Packaging was very good and my unit arrived in fine shape.  

And yeah, there are those cool LEDs in the sliders.