Пример #1
0
static int32 convert_vibrato_sweep(uint8 sweep, int32 vib_control_ratio)
{
  if (!sweep)
    return 0;

  return
    (int32) (FSCALE((double) (vib_control_ratio) * SWEEP_TUNING, SWEEP_SHIFT)
	     / (double)(play_mode->rate * sweep));

  /* this was overflowing with seashore.pat

      ((vib_control_ratio * SWEEP_TUNING) << SWEEP_SHIFT) /
      (play_mode->rate * sweep); */
}
static sint32 convert_vibrato_sweep(uint8 sweep, sint32 vib_control_ratio)
{
	if (!sweep)
		return 0;

	return
		static_cast<sint32>(FSCALE(static_cast<double>(vib_control_ratio) * SWEEP_TUNING, SWEEP_SHIFT)
		          / static_cast<double>(play_mode->rate * sweep));

	/* this was overflowing with seashore.pat

	 ((vib_control_ratio * SWEEP_TUNING) << SWEEP_SHIFT) /
		 (play_mode->rate * sweep); */
}
Пример #3
0
	if (vp->vibrato_sweep != 0)
	{
		/* Need to update sweep */
		vp->vibrato_sweep_position += vp->vibrato_sweep;
		if (vp->vibrato_sweep_position >= (1<<SWEEP_SHIFT))
			vp->vibrato_sweep=0;
		else
		{
			/* Adjust depth */
			depth *= vp->vibrato_sweep_position;
			depth >>= SWEEP_SHIFT;
		}
	}

	a = FSCALE(((double)(vp->sample->sample_rate) * vp->frequency) /
		((double)(vp->sample->root_freq) * output_rate),
		FRACTION_BITS);

	pb = (sine(vp->vibrato_phase * (1.0/(2*VIBRATO_SAMPLE_INCREMENTS)))
		* (double)(depth) * VIBRATO_AMPLITUDE_TUNING);

	a *= pow(2.0, pb / (8192 * 12.f));

	/* If the sweep's over, we can store the newly computed sample_increment */
	if (!vp->vibrato_sweep)
		vp->vibrato_sample_increment[phase] = (int) a;

	if (sign)
		a = -a; /* need to preserve the loop direction */

	return (int) a;
Пример #4
0
	  ramp *= tv;
	  rramp *= tv;
	  lfeamp *= tv;
	}
      if (voice[v].sample->modes & MODES_ENVELOPE)
	{
	  FLOAT_T ev = (FLOAT_T)vol_table[voice[v].envelope_volume>>23];
	  lramp *= ev;
	  lamp *= ev;
	  ceamp *= ev;
	  ramp *= ev;
	  rramp *= ev;
	  lfeamp *= ev;
	}

      la = (int32)FSCALE(lamp,AMP_BITS);
      ra = (int32)FSCALE(ramp,AMP_BITS);
      lra = (int32)FSCALE(lramp,AMP_BITS);
      rra = (int32)FSCALE(rramp,AMP_BITS);
      cea = (int32)FSCALE(ceamp,AMP_BITS);
      lfea = (int32)FSCALE(lfeamp,AMP_BITS);
      
      if (la>MAX_AMP_VALUE) la=MAX_AMP_VALUE;
      if (ra>MAX_AMP_VALUE) ra=MAX_AMP_VALUE;
      if (lra>MAX_AMP_VALUE) lra=MAX_AMP_VALUE;
      if (rra>MAX_AMP_VALUE) rra=MAX_AMP_VALUE;
      if (cea>MAX_AMP_VALUE) cea=MAX_AMP_VALUE;
      if (lfea>MAX_AMP_VALUE) lfea=MAX_AMP_VALUE;

      voice[v].lr_mix=FINAL_VOLUME(lra);
      voice[v].left_mix=FINAL_VOLUME(la);
Пример #5
0
    {
      /* Need to update sweep */
      vp->vibrato_sweep_position += vp->vibrato_sweep;
      if (vp->vibrato_sweep_position >= (1<<SWEEP_SHIFT))
	vp->vibrato_sweep=0;
      else
	{
	  /* Adjust depth */
	  depth *= vp->vibrato_sweep_position;
	  depth >>= SWEEP_SHIFT;
	}
    }

  a = FSCALE(((double)(vp->sample->sample_rate) *
	      (double)(vp->frequency)) /
	     ((double)(vp->sample->root_freq) *
	      (double)(play_mode->rate)),
	     FRACTION_BITS);

  pb=(int)((sine(vp->vibrato_phase * 
		 (SINE_CYCLE_LENGTH/(2*VIBRATO_SAMPLE_INCREMENTS)))
	    * (double)(depth) * VIBRATO_AMPLITUDE_TUNING));

  if (pb<0)
    {
      pb=-pb;
      a /= bend_fine[(pb>>5) & 0xFF] * bend_coarse[pb>>13];
    }
  else
    a *= bend_fine[(pb>>5) & 0xFF] * bend_coarse[pb>>13];
  
Пример #6
0
			channel[voice[v].channel].pitchfactor=
				static_cast<float>(bend_fine[(i>>5) & 0xFF] * bend_coarse[i>>13]);
		}
		if (pb>0)
			voice[v].frequency=
			static_cast<sint32>(channel[voice[v].channel].pitchfactor *
			         static_cast<double>(voice[v].orig_frequency));
		else
			voice[v].frequency=
			static_cast<sint32>(static_cast<double>(voice[v].orig_frequency) /
			         channel[voice[v].channel].pitchfactor);
	}

	a = FSCALE((static_cast<double>(voice[v].sample->sample_rate) *
	            static_cast<double>(voice[v].frequency)) /
	           (static_cast<double>(voice[v].sample->root_freq) *
	            static_cast<double>(play_mode->rate)),
	           FRACTION_BITS);

	if (sign) 
		a = -a; /* need to preserve the loop direction */

	voice[v].sample_increment = static_cast<sint32>(a);
}

static void recompute_amp(int v)
{
	sint32 tempamp;

	/* TODO: use fscale */
Пример #7
0
	 int32_t  la,ra;
	if (voice[v].panned == PANNED_MYSTERY)
	{
		ramp=voice[v].right_amp;
		if (voice[v].tremolo_phase_increment)
		{
			lamp *= voice[v].tremolo_volume;
			ramp *= voice[v].tremolo_volume;
		}
		if (voice[v].sample->modes & MODES_ENVELOPE)
		{
			lamp *= (float)vol_table[voice[v].envelope_volume>>23];
			ramp *= (float)vol_table[voice[v].envelope_volume>>23];
		}

		la = (int32_t)FSCALE(lamp,AMP_BITS);

		if (la>MAX_AMP_VALUE)
			la=MAX_AMP_VALUE;

		ra = (int32_t)FSCALE(ramp,AMP_BITS);
		if (ra>MAX_AMP_VALUE)
			ra=MAX_AMP_VALUE;


		voice[v].left_mix=FINAL_VOLUME(la);
		voice[v].right_mix=FINAL_VOLUME(ra);
	}
	else
	{
		if (voice[v].tremolo_phase_increment)
Пример #8
0
    {
		/* Need to update sweep */
		vp->vibrato_sweep_position += vp->vibrato_sweep;
		if (vp->vibrato_sweep_position >= (1<<SWEEP_SHIFT))
			vp->vibrato_sweep=0;
		else
		{
			/* Adjust depth */
			depth *= vp->vibrato_sweep_position;
			depth >>= SWEEP_SHIFT;
		}
    }
	
	a = FSCALE(((double)(vp->sample->sample_rate) *
		(double)(vp->frequency)) /
		((double)(vp->sample->root_freq) *
		(double)DEFAULT_RATE),
		FRACTION_BITS);
	
	pb=(int)((sine(vp->vibrato_phase * 
		(SINE_CYCLE_LENGTH/(2*VIBRATO_SAMPLE_INCREMENTS)))
		* (double)(depth) * VIBRATO_AMPLITUDE_TUNING));
	
	if (pb<0)
    {
		pb=-pb;
		a /= bend_fine[(pb>>5) & 0xFF] * bend_coarse[pb>>13];
    }
	else
		a *= bend_fine[(pb>>5) & 0xFF] * bend_coarse[pb>>13];
	
Пример #9
0
	int32 la,ra;
	if (hMidi->voice[v].panned == PANNED_MYSTERY)
    {
		ramp=hMidi->voice[v].right_amp;
		if (hMidi->voice[v].tremolo_phase_increment)
		{
			lamp *= hMidi->voice[v].tremolo_volume;
			ramp *= hMidi->voice[v].tremolo_volume;
		}
		if (hMidi->voice[v].sample->modes & MODES_ENVELOPE)
		{
			lamp *= vol_table[hMidi->voice[v].envelope_volume>>23];
			ramp *= vol_table[hMidi->voice[v].envelope_volume>>23];
		}
		
		la = FSCALE(lamp,AMP_BITS);
		
		if (la>MAX_AMP_VALUE)
			la=MAX_AMP_VALUE;
		
		ra = FSCALE(ramp,AMP_BITS);
		if (ra>MAX_AMP_VALUE)
			ra=MAX_AMP_VALUE;
		
		
		hMidi->voice[v].left_mix=FINAL_VOLUME(la);
		hMidi->voice[v].right_mix=FINAL_VOLUME(ra);
    }
	else
    {
		if (hMidi->voice[v].tremolo_phase_increment)