Re: CineSound Samples

From: Joseph J. Welser <jwelser_at_crystal.cirrus.com>
Date: Wed Jul 23 1997 - 13:18:39 EDT

> No actually I just wanted to *store* the sounds as samples. I would like
> (where possible) to create the sounds through emulation. Since most of the
> sounds are square waves they're going to be a lot cleaner if I just create
> the .WAV files under software, then play them back as samples.

        Actually, I was talking about Paul....but I can see how you got confused in my babble up there.
 
> There's only a few sounds that would probably be better to sample, like the
> missle shot sound of Solar Quest. It's a very strange clipping circuit
> that's probably not worth emulating in software.
>
> So yes, I'd be interested in a copy of the S2688 noise generator data sheet!

        Send me your address in email, and I'll send one out to you. Anybody else who is interested in this is welcome to do the same (I forget if anybody else wanted one of those datasheets besides you and I.)

        For what it's worth, here's the verilog model which I'm using to simulate one (The only thing you need from the datasheet is the clock frequency for the internal oscillator, which I forget at the moment...In my model, I kept the clock external....I will change that eventually...I also didn't bother including the "test" pins on the S2688, because Cinematronics doesn't use them.) It would be trivial to come up with one on your own in whatever language you want, but I already did it. While I'm at it, I'll start posting transfer functions for all the filters to save people lots of work (The ones that filter the S2688 noise get particularly nasty to derive closed form transfer functions for):

<Lots of detailed technical information about Star Castle Sounds starts here>

module s2688(noise, clk);

output noise;

input clk;

reg [17:1] lfsr;
integer clk_cnt;

wire noise = lfsr[17];
wire zero_det = ~(| lfsr);
wire fb = (lfsr[17] ^ lfsr[14] ^ zero_det);

initial
  begin
    lfsr <= 17'b0;
    clk_cnt = 0;
  end

always @(posedge clk)
  begin
    clk_cnt <= clk_cnt + 1;
    lfsr <= {lfsr[16:1], fb};
    if (lfsr == 17'b0) $display("%d\n", clk_cnt);
  end
    
endmodule
 
s-domain transfer functions (on v- pins of CA3080s):

For soft explosion:

  v- = .0127 + (3.989E-6 sec)s
----- ----------------------------------------------------------------
NOISE (4.376E-10 sec^3)s^3 + (2.478E-6 sec^2)s^2 + (3.670E-3 sec)s + 1

For loud explosion:

  v- = 5.4E-3 + (6.983E-7 sec)s
----- ----------------------------------------------------------------
NOISE (1.039E-11 sec^3)s^3 + (1.805E-7 sec^2)s^2 + (9.030E-4 sec)s + 1

For Fireball (This one was easy!):

  v- = (8.321E-4)60Hz + (6.657E-4)NOISE
     
For Shield Hit (Another easy one -- They must have put them in this order because they knew I'd need a break from the first 2!):

  v- = (1.420E-3)60Hz + (1.735E-3)NOISE

For Thrust Sound:

  v- = 1.917E-2 + (9.772E-5 sec)s
----- ----------------------------------------------------------------
NOISE (6.241E-8 sec^3)s^3 + (5.114E-5 sec^2)s^2 + (1.325E-2 sec)s + 1

        None of these have been tested yet. I need to bilinear transform these to the z-domain first. Also, I purposely left out the background, laser, and star sounds, because they are not generated with filtered noise. They use some 555 timer circuits to create those sounds. I'll post those later...

Joe

     
Received on Wed Jul 23 10:16:34 1997

This archive was generated by hypermail 2.1.8 : Fri Aug 01 2003 - 00:31:23 EDT