Saturday, January 31, 2009

Fake 1% Resistors

Be very careful about buying 1% resistors on eBay. See this thread from electro-music.com.

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.