Monday, October 31, 2011

Solaris Architecture, part 2: Control Sources

In Part 1, we looked at the audio signal generators, processors, and routing. In this part, we'll look at the control signal sources. To recap, these are:
  • Six envelope generators
  • One looping envelope generator
  • Four lag processors
  • Arpeggiator
  • Step sequencer
  • One envelope follower
  • Velocity and aftertouch
  • Performance devices: Joystick, ribbon controller, assignable buttons, and assignable knobs
  • Expression pedal input jack
  • MIDI continuous controllers
The six envelope generators are of the DADSR (delay-attack-decay-sustain-release) type. EG 6 is hardwired to the final VCA, although any of the VCAs can be routed to other destinations. The minimum time for any segment is 0.1 milliseconds and the maximum is 20 seconds. A useful feature is the ability to slope the sustain segment, instead of it having it be a constant level. The time of each segment can be modulated by velocity, key tracking, mod wheel, or one of four MIDI continuous controllers. The looping envelope is actually a universal event generator; in fact it is quite similar to the Encore Electronics UEG that I reviewed last year.

The lag processors do what you expect; you can route other signals through them to smooth transitions. (You don't have to use the lag processors to produce key portamento; each oscillator has its own glide settings.) The envelope follower produces a control signal proportional to a signal fed to it (presumably from an external input).

The Solaris is unusual in that it contains both an arpeggiator and a step sequencer. I have not played with either one very much yet. The arpeggiator can use internal clock or sync to MIDI clock. It does the usual up, down, up/down, random, and as-played patterns. The sequencer is a four-row, 16-step sequencer with variable step lengths. and it can be routed to any destination -- it isn't tied to oscillator frequency. Both have the ability to use stored patterns that the user can create, but the software to edit the patterns is not finished yet.

The keyboard generates velocity, release velocity, and aftertouch. There are scaling and offset parameters which can be stored in each patch, which apparently are capable of making velocity and aftertouch do some rather strange things. According to the manual, the Solaris will receive and respond to polyphonic aftertouch, although it will not generate it. The keyboard has the usual pitch and modulation wheels to the left; the pitch wheel is spring loaded while the mod wheel is not. The pitch wheel does not appear to be routeable to any parameter other than oscillator and rotor pitch. The mod wheel is defaulted to control the amount of LFO 5 that is routed to oscillator and rotor pitch, but it can be routed to other destinations.

The Solaris has an array of performance controls besides the pitch and mod wheels, the most notable of which is the ribbon controller that runs the span of the keyboard. In my tests with it, I found the ribbon controller to be very smooth and glitch-free. It can be configured so that the point where you first touch it becomes the zero point, in the style of the much-vaunted ribbon controller on the CS80. It can also be configured to hold its last value.

There are buttons to turn the arpeggiator and sequencer on/off, and a "hold" button that does what a sustain pedal does, except that it is latching; once you press the button, you can take your hands off the keyboard and it will keep playing. There are two assignable buttons that can send a constant value to a modulation destination. One of the preset pages on the large window allows the bottom row of knobs underneath the window to be used as assignable knobs. And there is a jack for plugging an expression pedal.

In the MIDI Setup, there are five controller designations labeled CC1-CC5. You can assign any MIDI continuous controller number to these, and then they can be routed to any modulation destination. Finally, it appears that every patch parameter is accessible via the MIDI NPRN mechanism, although it is possible that not all will respond in real time -- it would take a long time to try every possible value.

This wraps up the quick overview of the Solaris architecture. It's quite possible that I will later find out that some of what I've written is wrong; I'll make corrections in future posts. I'm getting a lot of requests for a demo, so I'll get that up in a day or two.

Saturday, October 29, 2011

Solaris architecture, part 1: Signal sources and routing

Here's a quick look at the Solaris architecture. At this point, I'm still studying the manual and experimenting with the synth, so my understanding is incomplete and some of what I say here may be subject to correction later. So be aware of that. Nonetheless, here goes.

At first glance, the voice architecture of the Solaris appears to be a basic four-layer setup with conventional oscillator-filter-amplifier chains. However, the routing is far more flexible than that: components can be swapped back and forth between layers, components can appear in more than one layer at a time, and feedback loops between layers are possible. Strange as it may sound, the best way to understand the voice architecture is to start in the middle, with the mixers.

There are four mixers, each of which has four signal inputs and two control inputs. The mixers serve the purpose of combining up to four signal inputs, and also act as VCAs under the control of the two control inputs. On the input side of the mixers are all of the signal sources:
  • Four oscillators
  • One white noise source
  • One pink noise source
  • Two vector processors
  • Two rotors
  • Two AM processors
  • External inputs
  • Four mixer outputs
  • Four VCA outputs
  • Five LFOs
  • Six envelope generators
  • Four lag processors
  • Arpeggiator
  • Step sequencer
  • One envelope follower
  • Velocity and aftertouch
  • Performance devices: Joystick, ribbon controller, assignable buttons, and assignable knobs
  • Expression pedal input jack
  • MIDI continuous controllers
A few things to note here. The first is that mixers can process audio signals, control signals, or any combination. Mixer outputs can in fact be routed as control signals back to various places. The second is that feedback is possible: a mixer's output can be routed back to itself, or to other mixers.

On the output side of the mixers are these signal destinations:
  • Four filters
  • Four insert effects slots
  • Four VCAs
The possible routings on this side of the mixer are: An insert effect can be before or after a filter, and either the filter or the insert effect can be the input to the VCA.

Audio Signal Sources

Let's look at the input sources. The mixers can accept either audio or low frequency sources, but I'll do the audio sources first. The original source of all audio signals within the synth (other than external inputs) is the four oscillators. You can choose from six different implementations for each oscillator. Two of them are analog emulations, a Minimoog and a Curtis VCO (I presume this means the CEM 3340); they offer the same waveforms as the originals. The multimode "MM1" offers all of the standard synth waveforms, plus some continuously morphable waves a la the EML 1o1, proper white noise (computed, not a sample playback), a low-frequency rumbling noise referred to as "S/H", and a supersaw that appears in the display as "Jaws". There's a set of single-cycle waveforms taken from the Prophet VS, a set of wavetables (which can be scanned using the "shape" parameter) from the Waldorf Microwave, and a sample playback mode into which you can load your own samples via the synth's USB interface. An oscillator can accept up to four modulation sources (which can be low or audio frequency, and includes pretty much every signal source in the synth), and each modulation source can be routed to modulate frequency, shape (the effect of which depends on the mode and waveform selected), or linear FM.

The white and pink noise sources do what you expect. Note that they are both computed rather than sampled, which means that they sound the same no matter which note you play, and there is no clocking noise.

The vector processors emulate the vector synthesis method used on the Prophet VS, Korg Wavestation and Yamaha SY77. The vector is basically a four-way mixer, with two sources at each end of an X axis and two more at the ends of a Y axis. (What they don't have is the ability to memorize a manual joystick movement and store it with the patch, which the synths named above do have. However, you could do this via an external sequencer.) By default, the vector inputs are tied to the panel joystick, but you can route any modulation parameter to either axis. The rotors are a variation on the vector synthesis idea: imagine a vector synthesis machine with a motor tied to the joystick, capable of making it move in a circle at audio rates. That's what the rotors do, crossfade between the four sources in a circular pattern. This amounts to a form of audio-rate wave scanning. The rotors track the keyboard (or not, if you switch it off), and otherwise act like oscillators.

The AM processors implement several possible amplitude modulation techniques, with one of the choices being "standard" AM, and another choice being ring modulation. I haven't played with this much yet and I don't yet understand all of the algorithms or parameters. Any signal sources can be selected as the carrier or modulation.

There are six external inputs -- four analog input jacks, and the left and right channels of the SPDIF input. They can be routed to audio and control destinations the same way that internal signal sources can. The mixer outputs can also be routed back to the mixer inputs. The Solaris makes no attempt to prevent feedback loops from being created, and in fact feedback loops can be used in patches.

Filters and Effects

The mixers output to a chain that consists of "enable part" switches, insert effects, filters, VCAs, and effects channels. Signal routing on this side of the mixers is more limited; any signal can be routed to the input of a filter, but the insert FX can only accept input from the mixer or filter of the same number (e.g., insert FX 1 can only accept input from mixer 1 or filter 1); the VCA can only accept input from the insert FX or the filter of the same number, and an FX channel can only accept input from the VCA of the same number, or from another FX channel or external input. (It does appear that clever use of the external outputs and inputs could get around some of these limitations, but I haven't tried that yet.) The "enable part" buttons, when turned off, cut off the output of the corresponding mixer to whatever comes after it, but they do not cut off the mixer from places where it has been routed to a modulation input.

The filters and insert effects come first, and can be placed in either order by means of selecting their respective inputs. (They can also be fed back to the mixer inputs.) The filters, like the oscillators, have several selectable implementations. The "MM1" multimode filter is the most versatile; it is a 4-pole filter that allows a number of pole combinations of low pass, high pass, bandpass, and band reject, in the style of the Oberheim Xpander. The "SSM" type emulates the 4-pole, SSM low pass filter as was implemented in the Rev 2 Prophet-5. The "Mini" type emulates the Moog 4-pole low pass transistor ladder filter, including its distortion and overdrive characteristics. "Obie" emulates the 2-pole filter as was implemented in the Oberheim SEM and other early Oberheim models; it is switchable to low pass, high pass, band pass, or band reject modes. The "Comb" fitler generates a comb-filter response as produced by a flanger or cardboard-tube echo; there are two variants. The "Vocal" filter produces vowel formants, and can be varied between vowel sounds. The insert FX are all waveform modification effects. The "Decimator" reduces the sample rate of the signal; I haven't tried it yet. The "BitChop" is a bit crusher, and there's a soft clipping distortion.

The next bit, I'm a bit confused about. The four VCAs each accept signal input from the corresponding filter or insert FX. There are two modulation inputs, one for level and one for pan, or they can be cut off which leaves the VCA wide open. The reason this doesn't result in an infinite sustain is that, apparently, all of the VCAs sum down to a fifth VCA which is hard-wired to envelope generator 6, and it provides the master control over the output. The effects channels then accept input from the master VCA, or from another FX channel or external input. The reason I say I'm not clear about this is because it's not quite what the manual shows, but I think it's correct, and you'll see why in a moment.

Each FX channel has four FX slots, each of which can hold one effect. The four available effects are the chorus/flanger, phaser, delay, and EQ. (They are all stereo.) The effects are "pooled" such that a given effect can only appear in one slot, in one FX channel, in a patch. Contrary to the manual, these appear to be after the master VCA, and here's why I say that: I played with the delay parameters and found that the maximum delay time is a whopping 20 seconds. And... if you set a long delay and then play some notes, the delay will continue to sound until the echoes die out, long after the master VCA has shut off. Statescape time! (And in fact, I'm already thinking about doing that... have to build a clever patch for it...)

Finally, there are five pairs of stereo output channels, four analog pairs and one SPDIF pair. Each FX channel can be routed to one pair, or the "dry" output of the master VCA can be routed out. This, for example, would let you send a dry output to an external effect, and a chorused output directly to your mixer or DAW.

Finally: I have found what appear to be a few bugs (not unexpected since the OS is version 1.0). I managed to crash the Solaris by twiddling the knobs under the large screen while I was on the second patch-store page (the one where you name the patch). Don't do that. Also, the keyboard velocity does not seem to work, and the aftertouch is odd -- it only outputs values of 0 or 63.

There's a lot more to the architecture; I haven't touched on the modulation sources yet. More in part 2.

Tuesday, October 25, 2011

Lookee what I found!

Hmm, I wonder what's in this box...

It has a label on it printed in German. Could it be...

It is... it's a... SOLARIS!

The day that's been long in coming is finally here! To recap: John Bowen was a cohort of Dave Smith's at Sequential Circuits; it's not clear to me who did what at SCI, but I understand that John had a lot to do with the design of the later synths, the Prophet VS in particular. After Sequential went bust, John went into soft synths and developed something called Scope. A few years ago he had the idea to put Scope into a hardware implementation -- the Solaris. I was one of the pre-order customers, #37 in line last time I looked. I pre-ordered mine... well, it's been two jobs ago. I leave the math as an exercise to the reader. But I never had any doubt (well, almost never) that John Bowen and his team would come through. It was a long strange trip, full of redesigns, financial adventures, NLA parts, and a few untimely vacations. But it's here. It's sitting on the couch in my den. The Solaris is real.

Let's take a quick look at the panel. It's basically divided into four sections. Starting from the left:

Each of those windows is a two-line backlit LCD display (I took these pics before I turned the power on) that shows the parameters for some functional grouping. The upper half of this part of the panel is the oscillators and rotors parameters, and the lower half is the LFO and mod sources parameters. Within each of these sections, there is a row of buttons across the top where you select which specific unit you want to display (osc 1, osc 2, etc). A page comes up which displays names and values for five parameters, each laid out on the display above one of the knobs. Turning the knob changes the value of the parameter displayed above the knob. Pages are grouped into two sets, "main" and "mod"; you select the set using the button at the lower left corner of the LCD window, and you use the two buttons to the left of the LCD to scroll through pages. The row of buttons at the bottom of this photo is mostly performance parameters, such as unison mode, octave transpose, and arpeggiator on/off.

Next section:

The top half of this section controls the mixer and insert effects. The bottom half, with the larger screen (which looks crinkly because I hadn't taken the protective plastic off) is the main display where you select patches to load. It also contains a huge number of parameter pages. The buttons across the top select page sets for particular categories of control, such as the arpeggiator, FM and AM modulations, and the MIDI setup. This LCD contains two rows of parameters on each page, corresponding to the two rows of knobs beneath.

Next section:

This is similar in appearance to the leftmost section. The top half has the filter and VCA parameters; the bottom half is the envelope generators. The four buttons at the bottom enable layers; a patch can have four layers.

Rightmost section:

These are the patch storing and recall controls. There's a button for bypassing the effects. The numeric keypad can be used to enter values for any numeric parameter, as can the data entry wheel. The knob at the top left is the master volume. You can see a bit of the ribbon control at the bottom -- it runs across the whole span of the keyboard.

And last but not least:

Yeah, we got lit pitch and mod wheels (which are an option). OK, they're a bit cliched now. So what. The dark circle above is the joystick, which doesn't show up very well in this photo.

So I've played with it a bit, and I can tell you that it looks and sounds wonderful. So far I've tried only a handful of the factory patches (some of them voiced by Bowen himself), but I've come across some incredible evolving pads, some really grungy leads, some weird vocal-like sounds, and a few what-the-heck-is-its. I've barely touched the patch controls so far. But it appears to have tremendous potential, a synth that will take years to master. I'm looking forward to the challenge.

Ladies and gentlemen, may I present to you... the Solaris.

Wednesday, October 19, 2011

New MU-format Manufacturer: Corsynth

Corsynth is a company based in Spain that has just introduced their first product: the MU-formatted C101 OTA-based lowpass filter. Nice to see a new player in the game, especially in the 5U formats, which the past few years has been taking a back seat to the Euro-format world.

OTA-based filters have a different sound and different characteristics from the more widely known transistor ladder filter, a design and sound usually associated with Moog. The classic Roland analog synths such as the System 100, the Jupiter-4 and -8, and the Junos used OTA-based filters, and so people who hear an OTA-based filter often describe it as the "Roland sound". OTA filters aren't very common in the modular world; the only other one I know of currently available in any 5U format is the Synth Tech MOTM-440, and it's not really a "typical" OTA filter because Paul Schreiber designed his own discrete OTA circuit for it. I have a 440 and it's a rather different beast. Judging from the sound samples on Corsynth's Web site, the C101 captures more of the classic, smooth Roland filter sound.

Here's a photo of the module, borrowed from their Web site:

As you can see, it has some interesting features. The most important ones are the voltage-controlled resonance and the 1V/octave control input. Getting any analog VCF to properly scale to 1V/octave is no mean feat, and it allows for some interesting tricks. There's obviously using the VCF as a VCO by turning the resonance up into self-oscillation, but the 1V/octave input also allows for things like harmonic tracking, e.g., you can run the output of a VCO into it, and feed the VCO's control voltage into the 1V/octave input. Then, you set the cutoff knob so that the cutoff centers on a harmonic of the VCO's output, and the filter will stay with that harmonic as the VCO frequency varies.

The two FM inputs, each with its own attentuators, will save you from having to use a CV mixer when doing complicated modulation. There's the two audio inputs, one with an attentuator, and the oversize cutoff frequency knob is a nice touch. Panel graphics are legible and easy to understand.

This thread at Muff's has a good discussion, and more photos, including a photo from the rear. The physical layout is interesting. There's a board that sits behind and parallel to the panel, Dotcom-style. But unlike most of the modules, this board carries only the panel controls. The core of the circuitry is on a daughter board behind the panel board, and connected to it via a ribbon cable. Probably the main motivation for doing this was to make it possible to adapt the design to other formats. The construction appear to be all through-hole, with all of the ICs socketed, which makes for easier repairs and mods. The board has both Dotcom and MOTM power headers. I've asked a question on the thread about what OTA was actually used, if it was the LM13700 or something else. (Unfortunately the CA3080, which was used for this type of application for years, is out of production and no longer available.)

The C101 is a pretty good-looking module, and a type of circuit that doesn't appear often in the modular world. The Web site lists the module at a price of E210, which currently translates into U.S. dollars at $290.

Monday, October 17, 2011

The Fizmo Project

As I wrote on VSE a few weeks ago, I have re-started my aborted project from a couple of years back to document the patch dump sysex format of the Ensoniq Fizmo. The first time around, I was trying to tweak patches and then manually examine sysex dumps for changes, and it became very frustrating. Changes were hard to find, and when I did find them, they seemed to make no sense.

A couple of months ago, out of the blue, I had an idea for how I could use Unix shell scripts in OSX to format dumps and find changes automatically. I put together a procedure that involves using Metro to capture the dumps and then a shell script to format and compare them. It compares two dumps, finds which bytes differ, and then lists the differences and where they are.

With this, I was finally able to get a start on the project. If you're not familiar with the Fizmo, it has a rather unusual patch structure. There are 64 memory slots for "sounds", each of which consists of two layers. Then, there are 64 "presets" (using the terminology from the user manual), which has four sound slots. Each one of the slots loads one of the 64 defined sounds. A preset also includes an insert effect and an arpeggiator setup.

So I set up a procedure for finding which bytes in a patch dump correspond with which parameters. Because there are so many parameters that you can't access from the panel, I'm using the Fizmo-specific version of Sounddiver that Ensoniq developed, running on an HP laptop. I have this connected to my MIDI network via a Turtle Beach 1x1 USB/MIDI interface. On my Mac, I'm using Metro to capture the patch dump sysex strings. The procedure steps go like this:
  1. Change a parameter in Sounddiver.
  2. Start Metro recording.
  3. At the Fizmo, save the current patch and then dump it.
  4. Stop recording.
  5. In Metro, view the sysex string (in hex) and copy it to a text file.
  6. Run my shell script to show me the differences between this dump and the previous dump.
  7. Copy the dump text file to the "old" file name, for comparison to the next dump.
Once I started working on this, I realized one reason why I could never make any sense of the dumps before. I had had several people advise me that the dump format is similar to the MR/ZR sysex format, which is documented. Hah... not even close. The Fizmo patch dump format is one of the craziest things I've ever seen. First, the basics: it's 3097 bytes long. The dump for each sound (two layers) is 640 bytes. Why so long? I wondered about that too. Each layer has about 100 parameters, so 640 bytes seems a bit much.

Well... one thing I'm finding out is that the way that the parameters are arranged in the dump is just insane. There are random filler bits and bytes all over the place. Hardly anything lines up on a byte boundary. Parameters don't appear to be in much of any particular order either. And some data fields are oversized for the minimum and maximum parameter values. (It doesn't help that there seem to be a huge number of different and seemingly arbitrary choices about what the minimum and maximum of each parameter should be. Some go from -64 or -128 to +64 or +128; some go from 0 to 100, some from 0 to 49, and some are just random.)

So far, I've managed to work out a lot of the parameters for layer 1 of sound 1 in the preset. I've got most of the oscillator, filter, and amp parameters, plus the parameters for keyboard splits, velocity mapping, volume and pan, tuning, and portamento. I've mapped out all of the parameters for envelope 1, including figuring out a few that aren't explained on the Sounddiver screen or in its help instructions. I'm hoping that the parameters for layer 2 of sound 1, and the layers for the other three sounds, use the same layout. So far, in the few that I've checked, this seems to be the case, but I need to do more to make sure.

I've also found where it saves the on/off and edit-enabled status of the four sounds, and the two layers of each sound. I've also found where it saves the patch name (the Fizmo can't of course display the names, but Sounddiver can), although I haven't decoded the format yet -- it's not anything as simple as plain old ASCII. I found something else, by accident: did you know that it saves the values of the F-I-Z-M-O real time controller knobs? I didn't realize that either, but it does.

Another bit that I haven't yet decoded is how the wave selection parameters work. I suspect that the parameter value may be, or contain, an actual memory address. Apparently there is a table in the OS ROM that tells it where the start address is for each waveform that you can select. Potential for sysex mischief there.

What I'm doing with all this info is putting it into a spreadsheet. I don't have MS Office at home, so I'm using the spreadsheet editor in Open Office. Here's a screen shot of what I've got so far:

The color-filled columns represent the bit patterns of the various parameters; there is no particular system other that the color matches the color of the corresponding text. Each column represents one bit and there are seven. (Since the leftmost bit of a data byte must always be 0 in the MIDI protocol, I left that out.) I number bits starting with bit 0 on the right, to bit 6 on the left. The un-colored columns represent bits that are filler, or whose function I haven't discovered yet. The row number is the byte number. The middle column documents parameter ranges and anything unusual about the parameter format.

This version of Sounddiver is very buggy. It has a lot of trouble remembering its configuration parameters. Nearly every time I start it up, I have to engage in some kind of software gymnastics to get it to communicate with the synth. About half the time, it will start up and then inexplicably lose track of the MIDI interface, and I have to either kill it and restart, or manually reconfigure it, or both. It never does the same thing twice. Now and then, all of the numeric parameter values will mysteriously blank out of the display. And periodically, it goes off on a mental vacation -- it consumes 100% of the CPU for about ten seconds, locking everything else out while it is doing so. I get the impression that it's a hack; it will claim that you're communicating with an MR series synth, and the Fizmo is hardly every referred to by name. Every now and then an error dialog pops up with a cryptic message and the developer's name, as if the developer was still in the process of debugging it when it was released.

Which may be true... between the condition of this version of Sounddiver and the peculiarities of the software in the synth itself, I'm getting the impression that the whole Fizmo project was a rush job. I picture Ensoniq, in financial trouble, trying desperately to crank out a product that might save the company, in a very short amount of time. Developers grabbing pieces of existing products and jamming them together with things from the lab, and rushing the whole thing out the door with minimal verification. And it never had a chance to find its niche before Ensoniq sold out to Creative Labs and production was abruptly terminated. And someone forget to check the current draw to see if it was within the voltage regulator's specs...

I'll post more on the sysex format as I get time to work on it; right now I'm only finding about 4 hours a week to give to this project. I think it's going to take about 40 hours to finish it, so that takes me about up to Christmas. At some point, once I've got the spreadsheet a bit more complete, I'll start posting the latest version to my Web site. You'll need Open Office to read the file; it's available for Windows, OSX, and Linux, and you can download it for free here.

I'll finish this up with a screen shot of the Fizmo Sounddiver version. Shown is the patch editor window, with the parameters for layer 1 visible, and a piece of the effects parameters on the right. Note the rather primitive look and feel, and the amount of wasted space.