How to get a smooth average of wheel collider RPM;

Ok so I am trying to get the average speed of my wheelcollider rpm’s so I can create a sound with gears for a car. However when it gets near a gear boundary it sounds even worse than it does before or after. It jumps around sounding horrible because of this. Before I put in the Time.deltaTime, it was jumping around 100 to 200 every frame. In perspective the fastest I want my car wheels to go would be about 1500 rpm. Here is the code I have so far.

averageRPM = 0;
         
for (int i = 2; i < 4; i++)
{
     averageRPM += colliders_.rpm * Time.deltaTime;_

}

averageRPM = (averageRPM * -1) / 4;

In your case please refer this JS script. Gear shifting also explain here. I found this from Unity forum. I
[downloaded by here][1]

// ----------- CAR TUTORIAL-----------------

// These variables allow the script to power the wheels of the car.
var FrontLeftWheel : WheelCollider;
var FrontRightWheel : WheelCollider;

// These variables are for the gears, the array is the list of ratios. The script
// uses the defined gear ratios to determine how much torque to apply to the wheels.
var GearRatio : float[];
var CurrentGear : int = 0;

// These variables are just for applying torque to the wheels and shifting gears.
// using the defined Max and Min Engine RPM, the script can determine what gear the
// car needs to be in.
var EngineTorque : float = 230.0;
var MaxEngineRPM : float = 3000.0;
var MinEngineRPM : float = 1000.0;
private var EngineRPM : float = 0.0;



function Start () {
	// I usually alter the center of mass to make the car more stable. I'ts less likely to flip this way.
rigidbody.centerOfMass += Vector3(0, -1, .25);
    }

function Update () {
	
		// Compute the engine RPM based on the average RPM of the two wheels, then call the shift gear function
	EngineRPM = (FrontLeftWheel.rpm + FrontRightWheel.rpm)/2 * GearRatio[CurrentGear];
	ShiftGears();

	// set the audio pitch to the percentage of RPM to the maximum RPM plus one, this makes the sound play
	// up to twice it's pitch, where it will suddenly drop when it switches gears.
	audio.pitch = Mathf.Abs(EngineRPM / MaxEngineRPM) + 1.0 ;
	// this line is just to ensure that the pitch does not reach a value higher than is desired.
	if ( audio.pitch > 2.0 )
	{
		audio.pitch = 2.0;
	}

	// finally, apply the values to the wheels.	The torque applied is divided by the current gear, and
	// multiplied by the user input variable.
	FrontLeftWheel.motorTorque = EngineTorque / GearRatio[CurrentGear] * Input.GetAxis("Vertical");
	FrontRightWheel.motorTorque = EngineTorque / GearRatio[CurrentGear] * Input.GetAxis("Vertical");
		
	// the steer angle is an arbitrary value multiplied by the user input.
	FrontLeftWheel.steerAngle = 10 * Input.GetAxis("Horizontal");
	FrontRightWheel.steerAngle = 10 * Input.GetAxis("Horizontal");
}

function ShiftGears() {
	// this funciton shifts the gears of the vehcile, it loops through all the gears, checking which will make
	// the engine RPM fall within the desired range. The gear is then set to this "appropriate" value.
	if ( EngineRPM >= MaxEngineRPM ) {
		var AppropriateGear : int = CurrentGear;
		
		for ( var i = 0; i < GearRatio.length; i ++ ) {
			if ( FrontLeftWheel.rpm * GearRatio *< MaxEngineRPM ) {*
  •  		AppropriateGear = i;*
    
  •  		break;*
    
  •  	}*
    
  •  }*
    
  •  CurrentGear = AppropriateGear;*
    
  • }*

  • if ( EngineRPM <= MinEngineRPM ) {*

  •  AppropriateGear = CurrentGear;*
    
  •  for ( var j = GearRatio.length-1; j >= 0; j -- ) {*
    

_ if ( FrontLeftWheel.rpm * GearRatio[j] > MinEngineRPM ) {_