Sunday, January 11, 2009

A couple of more Fizmo NPRNs

I've worked out two more envelope parameters.  Parameter 112 is some kind of linearity control for the attack phase for the amp envelope.  A value of 127 makes it (hearing-wise) linear; the attack rises smoothly like you would expect.  A value of 0 makes it highly exponential; the envelope barely rises until near the end of the attack time, where it "turns the corner" and rises very abruptly to the peak value; it's almost like having a delay followed by a very short attack.  The default value is 127, which it returns to anytime you move either the attack knob or the decay knob on the panel.

Parameter 113 sets the amount of time the envelope holds at the attack peak before the decay phase begins.  The range appears to be 0-99, with 0 being the minimum.  It returns to 0 when you move the decay knob on the panel.  

Friday, January 2, 2009

The System, Area, and electronica on Sirius XM

Well, the merger has gone through, and as I speculated a year ago in this post, The System didn't make the cut. I can only guess at the reasons why. The big one was probably the fact that the channel was one of the two remaining XM channels being sourced from Worldspace, and both XM and Sirius had been moving in the direction of doing all of their own production in house even before the merger.

I do have to say one thing: over the past year, The System had become a shadow of its former self. That was a shame, and I imagine that it occurred because Worldspace knew they were going to be dropped, so they stopped putting the effort into it. I'm not knocking Zoltar, who is a very capable program director and does a great job with his Subterrainian show. Reality is reality, and there's no point in trying to improve a product that is going to be dropped anyway. But it was disappointing to note, over the past six months in particular, how the playlist was stagnating.

Now, for my next controversial point: The Sirius carryover trance channel, Area, is not bad. It does seem to depend on what time of day you catch it (so far, I've enjoyed the daytime programming the most). I'm liking the Paul Oakenfold shows. I must say that, from what I've heard of it, I don't care for The Juicy Show that much. In the last few weeks, Area seems to be picking up some of The System's playlist, which is a good thing.

However, it's still a bad trend. I've done some ranting on xmfan.com about the dropping of Beyond Jazz, for which there is no replacement. Beyond Jazz was playing a fair amount of acid jazz, which is another facet of electronica that doesn't come anywhere close to airplay on terrestrial radio. And don't even get me started on the long-departed Music Lab. In the dance music category, Chrome was also dropped and not replaced, and Chill has drifted way off message -- it almost sounds like an easy-listening channel now. Satrad was created with the idea that it would be genre radio, carrying almost any kind of music you could imagine with its multitude of available channels. However, we're seeing many of the genre channels being dropped in favor of more mainstream channels, largely duplicating programming on existing channels. What's up with that? It makes no sense.

So, the long-term future of electronica broadcasting appears to be Internet radio. Internet broadcasting has a lot of good points, but there are two downsides to it, one for the listeners and one for the artists. For the listeners, there's the problem of how to receive it affordably in the car or other mobile means. Plus, even at home, you are still at the mercy of your ISP and bandwidth provider. Podcasts may be the answer to this, but it misses the immediacy of live broadcasting. For the artists: Note that part of the problem that satrad is having now is the spiraling royalty rates being forced on Sirius XM by the Copyright Commission. It isn't widely known, but the Commission has within the past two years raised rates for satrad and Internet broadcasting to far higher than what terrestrial radio pays. (This of course occurred at the behest of the NAB, which apparently has the Commission in its pocket.) Satrad can't escape this; it has the choice of paying, or going out of business.

However, Internet broadcasters have a third choice: go offshore. There are plenty of small Carribbean and Pacific Island nations that are willing to charge Internet broadcasters far lower royalties, and their governments will politely ignore American demands for higher royalties. Or, they can move their operations to Russia and pay no royalties at all, although reliable bandwidth there is a concern. As a practical matter, there is no way the U.S. government can filter these broadcasts at the border. The net result: the excessive royalty rates will actually result in little to no royalties to the artists. Ironically, The System, or at least a shadow of it, survives on XM's online service. My understanding is that this is just an automated jukebox of the songs that were on The System's server space at the time the satellite channel was dropped. It's better than nothing, but in the long run, it's not likely to survive either.

There is one more factor that needs to be touched on, though: fan support. If you look at the Dance Discussion forum on xmfan.com, you will note that over the past several years, up until recently, there have been many fan posts concerning Chrome and BPM, but almost none for The System. I tried posting a few things System-related, and none of my posts ever got a reply. I can see how a program director, faced with making a decision about bandwidth, might look at that and conclude that fan interest for The System didn't exist. Moral of the story: In this day and age, if you want electronica (or whatever your favorite form of music is) to survive, you have to support it.

Thursday, January 1, 2009

Exploring the Fizmo NRPN set

After not being able to find any reliable documentation on the NRPN values that the Fizmo uses for patch editing (no, it's not the same as the MR/ZR series), I've started a series of experiments to determine how the NRPN numbers map to parameters, and find all of the "hidden" parameters that you can't edit from the panel.  I've already had a bit of luck on that score.  Before I get into it, here's:

A Quick Tutorial on NRPNs

Those who know some MIDI already know that the number of available continuous controller #'s is limited, and most of them are already assigned.  Some are assigned to specific performance controls (mod wheel, which is controller #1, being the best known).  Some are reserved for sending the low bytes for 14-bit controller values.  The real-time messages eat up some numbers, and General MIDI consumes a few more each time the spec is updated.  So there aren't enough unassigned ones to assign one to each parameter that is editable on a typical synth.  So some manufacturers resort to sysex for parameter editing.

However, the continuous controller definitions themselves contain the mechanism for extending the available set of numbers: The RPN/NRPN mechanism.  The way it works involves four controller messages: two to select the parameter to be edited, and two to send the value.  Registered Parameter Numbers, or RPNs, are defined in the MIDI standard; the two most commonly used RPNs allow master tuning and pitch bend range to be altered via MIDI.  However, Non-Registered Parameter Numbers, or NRPNs, are reserved in the MIDI standard for manufacturers to define how they wish.  

To send an NRPN value, first you send messages to select the desired parameter.  Continuous controller 99 is used to send the most significant byte (MSB), and controller 98 is used to send the least significant byte (LSB).  If the receiver has fewer than 128 parameters, the MSB message need not be used.  For example, to select parameter 131 (whatever that parameter happens to be on a given synth), you would send a controller 99 message with a value of 1, and a controller 98 message with a value of 3.  (The value of the controller 99 message is multiplied by 128, and added to the value of the controller 98 message.)  Having selected the parameter, you then send two more messages to specify the value of the selected parameter: controller 8 sends the MSB of the value, and controller 38 sends the LSB.  (If the parameter is limited to the range 0-127, the MSB message need not be sent.)  If we wanted to set the selected parameter to a value of 286, we send the controller 8 message with a value of 2 (2*128=256), and the controller 38 message with a value of 30.  

Here's what I've found out so far about the Fizmo's NRPN implementation:

Basic Structure of the NRPN numbering

Each parameter within each sound and oscillator has its own NRPN parameter number.  (Recall that each patch on the Fizmo has four sounds, or layers, and two oscillators per sound.)  It is possible to edit multiple sounds and oscillators at once from the panel; if you do this, the Fizmo will send out a separate set of NRPN messages for each individual parameter which has been changed.  In order to make the Fizmo send editing NRPN messages, you have to go into the system edit mode; press the MIDI button multiple times until "nRPn" appears in the display.  Then, press the "yes" button to turn it on.  If you then hit the save button, it will save this to flash and become the power-up setting.  
The high byte of the parameter number is used to specify which sound and oscillator is being accessed.  The values go like this:
  • Sound 1, oscillator 1: 2
  • Sound 1, oscillator 2: 4
  • Sound 2, oscillator 1: 6
  • Sound 2, oscillator 2: 8
  • Sound 3, oscillator 1: 10
  • Sound 3, oscillator 2: 12
  • Sound 4, oscillator 1: 14
  • Sound 4, oscillator 2: 16
Because there are more than 128 parameters in each oscillator, a few parameters will have the MSB value one higher than noted above.  Parameters which are not specific to an oscillator (such as the dry/effect mix) have an MSB value of 1.

The LSB then specifies the individual parameter.  Here are some that I've found so far (the MSB values shown here as an example are for sound 4, oscillator 1):


Control NRPN (99/98)

Effect Mix 1 34
Pitch Tune 14 14
Pitch Fine 14 15
Pitch Mod button 14 26
Pitch Mod Amount 14 27
Glide Time 14 18
Mono Button 14 16
Attack (Pitch) 14 79
*sent initially 14 80
Attack (Filter) 14 95
Attack (Env) 14 111
*sent initially 14 112
Decay (Pitch) 14 85
*sent initially 14 81 14 83 14 82 14 84
Decay (Filter) 14 101
*sent initially 14 97 14 99 14 98
Decay (Env) 14 117
*sent initially 14 113 14 115 14 112
Sustain (Pitch) 14 86
Sustain (Filter) 14 102
Sustain (Env) 14 118
Release (Pitch) 14 87
Release (Filter) 14 103
Release (Env) 14 119
Envelope Mode button 14 123
Velocity button 14 120
*sent initially 14 125
Amp Level 14 12
Pan 14 13
Effect Bus Select button 14 20
Wave Select 14 52
*sent initially 14 51
Wave Modulation button 14 57
Wave Mod Amount 14 58
Filter Cutoff 14 32
Filter Resonance 14 33
Filter Envelope Amount 14 34
*sent initially 14 119
Filter Mod Amount 14 36
Filter Kybd Track button 14 37
*"on" also sends 14 39
Amp Noise Mod Amount 14 70
Amp LFO Mod Amount 15 0
Amp LFO Shape button 14 126

The ones that say "sent initially" are clues to some of the hidden parameters.  Many of these get set to default values when you move a panel control that is associated with those parameters.  The big win here, if I can sort it out, is the envelope parameters.  The Fizmo envelopes are actually multi-segment envelopes, but only ADSR-type controls are provided on the panel, and when you move one of them, the "extra" segments get set to defaults.  (Sometimes.)  That's what the "sent initially" means; it sends those the first time the control is moved because that action resets them, and then they aren't sent again because you can't change them from the panel.  Here, for example, is a dump from MIDI Monitor from moving the Decay knob (the dump shown is for sound 4, oscillator 2), with the Amp envelope selected:


22:35:46.206 From MIDI Express XT #2 Port 8 Control 3 99 16
22:35:46.206 From MIDI Express XT #2 Port 8 Control 3 98 117
22:35:46.207 From MIDI Express XT #2 Port 8 Control 3 6 0
22:35:46.208 From MIDI Express XT #2 Port 8 Control 3 38 1
22:35:46.208 From MIDI Express XT #2 Port 8 Control 3 99 16
22:35:46.209 From MIDI Express XT #2 Port 8 Control 3 98 113
22:35:46.209 From MIDI Express XT #2 Port 8 Control 3 6 0
22:35:46.210 From MIDI Express XT #2 Port 8 Control 3 38 0
22:35:46.211 From MIDI Express XT #2 Port 8 Control 3 99 16
22:35:46.211 From MIDI Express XT #2 Port 8 Control 3 98 115
22:35:46.212 From MIDI Express XT #2 Port 8 Control 3 6 0
22:35:46.213 From MIDI Express XT #2 Port 8 Control 3 38 0
22:35:46.213 From MIDI Express XT #2 Port 8 Control 3 99 16
22:35:46.214 From MIDI Express XT #2 Port 8 Control 3 98 114
22:35:46.215 From MIDI Express XT #2 Port 8 Control 3 6 0
22:35:46.215 From MIDI Express XT #2 Port 8 Control 3 38 127
22:35:46.216 From MIDI Express XT #2 Port 8 Control 3 99 16
22:35:46.216 From MIDI Express XT #2 Port 8 Control 3 98 116
22:35:46.217 From MIDI Express XT #2 Port 8 Control 3 6 0
22:35:46.218 From MIDI Express XT #2 Port 8 Control 3 38 127
22:35:46.265 From MIDI Express XT #2 Port 8 Control 3 99 16
22:35:46.265 From MIDI Express XT #2 Port 8 Control 3 98 117
22:35:46.266 From MIDI Express XT #2 Port 8 Control 3 6 0
22:35:46.267 From MIDI Express XT #2 Port 8 Control 3 38 2
22:35:46.313 From MIDI Express XT #2 Port 8 Control 3 99 16
22:35:46.313 From MIDI Express XT #2 Port 8 Control 3 98 117
22:35:46.314 From MIDI Express XT #2 Port 8 Control 3 6 0
22:35:46.315 From MIDI Express XT #2 Port 8 Control 3 38 3
22:35:46.385 From MIDI Express XT #2 Port 8 Control 3 99 16
22:35:46.386 From MIDI Express XT #2 Port 8 Control 3 98 117
22:35:46.386 From MIDI Express XT #2 Port 8 Control 3 6 0
22:35:46.387 From MIDI Express XT #2 Port 8 Control 3 38 4

Note all the parameters that changed at first, and then that only parameter 117 continued to change as the knob kept moving.  Clearly, parameter 117 corresponds to the sustain knob on the panel.  The other parameters are associated with additional envelope segment levels and/or times, not accessible from the panel, that were set to default values by the movement of the sustain knob.  

I've only managed to sort out a few of these parameters so far.  There is one "extra" parameter associated with the Attack knob, in addition to the attack time itself.  When I started experimenting with this, I expected it to be an attack peak level setting, but it wasn't.  What it turned out to be instead is a time scaling parameter that makes the attack faster or slower, depending on the note-on velocity.  The resulting attack time is proportional to:

attack time * scaling parameter * (128 - velocity)

If this parameter is set to its max value (which appears to be 99), and attack time is at its max value, and a note is struck with minimum velocity, a veeeerrrrry long attack (about a minute) results.  With these same settings, a max-velocity note results in an attack time of about five seconds.  If the scaling parameter is set to 0, attack is instantaneous regardless of what the attack time is set to.  

For the pitch envelope, the attack time is parameter #79 and the scaling parameter is #80.  For the filter envelope, the corresponding parameters are #95 and 96, and for the amp envelope, #111 and 112.

Another finding: The Fizmo manual gives one the impression that velocity scaling on envelope levels is an on-off parameter, selected by the Velocity button.  Not so.  It's actually a variable parameter.  To set it, using the amp envelope as the example, you must send the desired value to both parameters #120 and 125.  The #120 corresponds to the value that is actually active; the #125 is a "holding" register.  When you turn off velocity response with the Velocity button, parameter #120 goes to zero.  When you turn it back on, it resets #120 to #125's value.  The interesting thing is that there does not appear to be any way to set parameter #125 to a default value from the panel.  Without editing software or some other way of sending NRPNs, you could get really frustrated if you were editing a patch with parameter #125 set to a minimal value; the Velocity button would appear to have no effect.  I've seen that some of the factory patches have different values of this parameter, so be careful about using a factory patch as a starting point for one of your own patches.  

I'm going to keep working on this, in part because Sounddiver for OSX is apparently a dead item now, and there doesn't seem to be any other way of computer editing a Fizmo on a Mac without resorting to OS9.  To send NRPN sequences, I'm using the event editor in Metro; to observe NRPNs coming back from the Fizmo, I'm using MIDI Monitor.  

Tuesday, December 30, 2008

Statescape: Idaho

I've got a new Statescape up.  Actually two... kind of.

Saturday, December 20, 2008

MIDI Manufacturer IDs

In the MIDI standard for system exclusive ("sysex") messages, one of the information bytes in the header is an ID number that specifies the manufacturer who defined the particular sysex format. Since each manufacturer is free to define their own sysex formats, the manufacturer ID is necessary so that a synth from one manufacturer won't accidentally respond to a sysex meant for a synth from another manufacturer if they coincidentally happen to use the same model number fields. Manufacturer IDs are handed out by the MIDI Manufacturers' Association, which is also the body responsible for maintaining the MIDI protocol standard. Any manufacturer that wishes to define its own sysex messages needs to apply to the MMA for an ID.

Now, in the original MIDI standard, the manufacturer was defined as one byte long. Allowing for the fact that the high bit in any data byte in any MIDI message must be 0 (in order to distinguish it from a command byte, which always has a high bit of 1), that leaves a usable range of numbers of 00-7F hexadecimal, or 0-127 decimal. Long ago, in the original 1983 standard, the MIDI principals (which at the time were Sequential Circuits and Roland) decided to divide the manufacturer IDs into four groups, to be assigned to manufacturers on a geographic basis:

  • 01 to 1F for American manufacturers (00 was reserved, which I'll get to in a bit)
  • 20 to 3F for European manufacturers
  • 40 to 5F for Japanese manufacturers
  • 60 to 7F were reserved for future use (Some of these have since been assigned for certain special purposes, such as the MIDI Sample Dump Standard)

In the original specification, published by Sequential in the January 1984 version of "The Complete SCI MIDI", these manufacturers were assigned:

American group:

01 Sequential
02 Big Briar
03 Octave/Plateau
04 Moog Music
05 Passport Designs
06 Lexicon
10 Oberheim

European group:

20 Bon Tempi
21 SIEL

Japanese group:

40 Kawai
41 Roland
42 Korg
43 Yamaha

Sequential received ID #01 as befitting its status as co-originator of the MIDI standard, along with Roland, which was given the "first" number in the Japanese group. (I don't know why Kawai was given 40; it may have been the case that 20 and 40 were reserved at first, as 00 was, and then un-reserved and assigned later.)

A few things to note from that list. Both Moog Music and Big Briar are assigned IDs. At the time this list was issued, in 1984, Moog Music was the original New York company, owned at the time by Norlin (I think; it was about this time that Norlin broke up), while Big Briar was Bob Moog's company in North Carolina (he had been gone from Moog Music for a number of years at this point). As most of you know, the Moog Music that exists now is actually Big Briar renamed; the original Moog Music has long since folded. So I got curious as to which ID Moog is using now. Turns out the current production Voyager uses 04, the original Moog Music ID, and presumably 02 is no longer in use. The MMA's rules today state that a manufacturer must renew their ID each year, or it can be reassigned (much like Internet domain names). However, I doubt that the MMA will reassign 02, even if Moog is no longer renewing it.

Some of you may be wondering now who those other companies in the American and European groups are. Other than Moog/Big Briar and Lexicon, they are all gone from the music industry now. Sequential you know about, the creator of the mighty Prophet-5 and the co-inventor of MIDI. Oberheim is another familiar name to synth perfomers. Octave/Plateau had an interesting run in the '80s; they created what was probably the first rackmount synth, the Voyetra-8, with a remote keyboard that connected to it via a (non-MIDI) control bus. A couple of years later, they introduced the first computer-based sequencer software, which was also called Voyetra, and at that time they changed the company name to Voyetra. This was a very popular package from 1986 up until about 1992, when competition overcame it.

Passport Designs was also a music software company, coinciding with the MIDI era. Like Voyetra, they marketed a sequencer package, called Trax, that was popular in the early days of computer sequencing. They are probably best known for Alchemy, a sample librarian marketed in the 1990s. They were bought out and the existing product line discontinued in 1998. SIEL was an Italian synth manufacturer of some note, one of the two most successful of the 1980s European manufacturers (along with Crumar). They were bought out by Roland in 1987. Bon Tempi was a European maker of combo organs and string machines. They are still in business, but no longer manufacture any keyboard instruments other than some toys. It's curious that they were one of the first to get a manufacturer ID, since I don't think they ever marketed a product that used MIDI.

Despite the demise of these companies, the field of products that use MIDI has expanded dramatically since that 1984 specification. At the time, it was anticipated that only a few dozen manufacturers would ever request or need IDs. But a funny thing happened on the way to the 21st century: the MIDI-using synth field grew dramatically with the advent of soft synths and plug-ins, plus there was an unanticipated explosion in the number of non-synthesizer applications of MIDI. It's common now to find the protocol in use controlling not only studio effects and pipe organs, but also totally non-musical applications such as video editors and light show controllers. By 1990, the pool of available IDs was running out. So the MMA created an "escape hatch": They redefined the manufacturer ID standard to state that an ID byte of 00 indicates that the following two bytes constitute an extended ID field. This opened up another 16,384 ID numbers. They retained the convention of the geographical groupings: the numbers from 00 00 00 to 00 1F 7F are the American group, the 00 20 00 to 00 3F 7F group is the European group, and the 00 40 00 to 00 5F 7F group is the Japanese group. The group from 00 60 00 to 00 7F 7F is apparently going to be a new Asian (China/Russia/Korea/India et al) group, but I don't think any of those have been assigned yet.

There's a list on the MMA's Web site of the most recently assigned IDs (not updated in about a year, unfortunately), and there are some interesting names that pop up. I wonder why National Semiconductor and U.S. Robotics need MIDI IDs? Nvidia (manufacturer of computer video cards) appears, as does supercomputer maker Silicon Graphics (I didn't realize they were still in business). Some old-school names in the professional audio business appear: Electro-Voice, Shure, Otari. Is someone designing MIDI-controlled microphones and loudspeakers? ID 00 01 51 is assigned to Research in Motion, the Blackberry maker. Can you remotely control your Blackberry via MIDI? If so, why? There's a few sad notes too: among the IDs marked "relinquished" is 00 20 50, which belonged to Hartmann GmbH, maker of the brilliant but ill-fated Neuron.

Anyway, what prompted all this was this posting on Matrixsynth, which points out that Dave Smith Instruments is using ID 01, which was Sequential's. Nice to know that the MMA hasn't forgotten their roots. If anyone should be entitled to use Sequential's number, Dave Smith is the guy.

Monday, December 15, 2008

My order is in

Placed an order for a Synthesis Technology MOTM-650 MIDI/CV converter today, to take advantage of their end-of-year sale. The 650 is just what I need to bring flexible MIDI control to The Discombobulator. I like the idea of being able to drive a lot of different control voltages with the sequencer, and with the 650, you can get up to 12 control voltages out -- a pitch CV, velocity CV, and aux CV (assignable to a MIDI continuous controller) for each of four channels. After thinking some about where to mount it, I'm going to build a fourth block, which will contain the 650, a pair of envelope generators, and a VC panner, along with perhaps a mixer and whatever else I can fit in. This block will serve as the modular's primary interface with the rest of the world, taking MIDI from the sequencer and sending audio outputs to the mixer.

Procuring the 650 will allow me to dedicate the JKJ Electronics (RIP) CV-5 to the EML 101. For the past several years, the CV-5 has done double duty, interfacing to both the 101 and the modular. This has been a pain because the EML uses 1.2V/octave scaling, so every time I move it from one to the other, I have to re-scale it. There are, however, a lot of convenient features about the CV-5, which I'm going to have to work a bit to get the 650 to do the same things. One thing I appreciate about the CV-5 is that it contains a built-in MIDI-controlled panner; you plug in a mono audio signal, and it produces a stereo out. The panning is contolled by the MIDI Pan continuous controller, and it's internal to the interface. This is nice for automating panning during mixing; I do a lot of virtual-mix techniques, and to make that work you need the mixdown to be absoultely as automated as possible.

Other handy features of the CV-5: It processes pitch bend messages and adds or subtracts pitch bend from the pitch CV output, and you can set the bend range via MIDI. It also has a built-in LFO which can be added to several of the CV outputs, and the LFO can be sync'ed to MIDI clock. (It also has the ability to convert MIDI clock to DIN sync, but I don't use that.) A built-in portamento can also be programmed via MIDI and added to the pitch CV output, and there are several choices for note priority, velocity and aftertouch routing, and gate/trigger modes. (This includes S-trigger output, which is another thing I don't use since I'm not driving a Moog with it.)

Those are the sorts of things I've been looking for in a replacement for the CV-5, and the 650 fills the bill. Plus, it is of course built in the MOTM form factor, which the CV-5 is not. And, the 650 has lots of additional goodies, including built-in sequencing, microtuning tables (which work by offsetting the pitch CV output depending on what note is played), and the ability to update the firmware via MIDI. One little glitch is that there is an updater program for Windows and Mac OS9, but not OSX. I'm going to ask Paul S. if he's willing to document the updater protocol; if so, I'll write an OSX updater program and give it away to other 650 owners under GPL-type terms.

Saturday, December 6, 2008

Finishing Assembly of the MOTM-820




Picking up where we left off: Here's the remaining parts, waiting to be installed:





Most MOTM 2U-width modules have the right-side pots mounted on the PC board, and they are used to help support the board's attachment to the panel.  Here are the pots, waiting to be soldered:



One nice thing about the MOTM kits is that they provide pre-stripped and tinned coax for the audio I/O jacks:



And the rest of the I/O is done with twisted pairs.  At this point, all soldering on the board is done.



The panel, as it comes out of the bubble wrap:



Mounting the jacks:



The right way to tighten the jack nuts, without scratching the panel.  The piece of red tape on the socket helps me find it quickly in the toolbox, since I use this size often.



The mounted jacks.  I've left them a bit loose because sometimes it helps during soldering if you can rotate them, to make it easier to get the iron in.  I'll straighten and tighten them after soldering.



The PC board is supported by a metal bracket.  This shows how the bracket will mount onto the panel.  It fastens to two studs that are welded to the back of the panel.  The board mounts on the right side of the bracket, on standoffs.  The pot stems will go through the large holes and be clamped to the panel by mounting nuts front and back.  



Adjusting the mounting nuts on the pot stems on the back side of the panel, so that they are snug to the panel:



The completed mounting, with the board mounted to the bracket, and the bracket mounted to the panel:



This is what the panel looks like from the front at this point.  The two remaining holes are for a toggle switch and an LED that will both mount directly to the panel.



And now we pause for a cat photo.  This is DJ:



Soldering the coax and twisted pairs to the jacks.  I'm using the screwdriver to keep some tension on the coax while I solder it.  Note that at this point the switch and LED have been mounted and soldered, at the upper right of the panel.  



If you find that you have accidentally soldered something to the wrong jack, don't unsolder it; just swap the jacks around.  Of course, I never do that, ahem...



Last step: attaching the knobs.  



I admit it; I'm obsessive about knob registration.  



The completed module, ready to mount and test: