Jay,

I did some looking around and found the sound.c routine at <http://fractint.net/fractsvn/branches/rt-refactor-device/fractint/dos/sound.c>. As I said, I am not a programmer. But I can understand a bit of the code.

First, concerning the 0 value in sound map. The following is the only test for correct output values that I could find:
  for(j=0;j<=11;j++) {
      scale_map[j] = abs(uvalues[++k].uval.ival);
      if (scale_map[j] > 12)
         scale_map[j] = 12;
   }

It appears that the only corrections intended were absolute value (for negative numbers) and replace with 12 if greater than 12. So, at least within the sound routine, zero is a legitimate value.
I am not at all sure that that was as intended, since there is no corresponding input choice, but it is what it is for now.

I would be fine with the idea that zero would be a rest, incidentally. I do think the option of entering zero tone value could be useful, in that it could be used as another instance of the root note in the scale being used, but there are other ways to do that.

One way or the other, I think that there should be a way to turn an individual note off. Whether it is done via sound map value "0" or "off" or otherwise doesn't really matter to me, but it may to you.

Now, I hope that I can set your mind at ease in regard to negative Hz values. It looks to me like there are no negative values sent to the synth. In fact, there are no values  <20 or >5000 passed. All that the negative values do is subtract (x)hertz from each note. If that value is <20 it is sent as 0. Here is the pertinate code snippet.

 /* clip to 5 Khz to match the limits set in asm routine that drives pc speaker*/
   if (freq > 5000) return(0);
   if(freq<20) return(0);/* and get rid of really silly bass notes too */
So, it looks to me like we could both have our cake and eat it too.

Bill
On 5/8/2011 12:58 PM, Jay Litwyn wrote:
I mean when I run my parameters, with zeros, FracTint considers them to be invalid, so it replaces them with the defaults; 1/2/3...If it did *not* consider zeros to be invalid, and I am thinking that zero is a very reasonable reprezentation of resting, then I would not be forced to wonder what negative Hertz values mean. In my synthesizer, negative Hertz values *can* mean waves that start with a negative phase. I don't think OPL allows that.