Outerra forum

Anteworld - Outerra Game => Modding: Importer, Tools & Utilities => JavaScript development => Topic started by: bugsblake on June 03, 2013, 06:11:57 am

Title: engine sounds
Post by: bugsblake on June 03, 2013, 06:11:57 am
hi all. i got a couple of youtube vids with with good sounds for engine start up, tick over, shut down!

i have converted them to mp3 files but i have to ask, whats a good free program to edit theses files? i used to use wavelab many years ago (not free) but cant find the disc for the life of me! so what program is easy to use and free to download?

also any advice on setting up the sounds would be great! never done vehicle sounds before! all i know is that in outerra they have to be mono! so any advice welcome! thanks
Title: Re: engine sounds
Post by: murkz on June 03, 2013, 08:01:54 am
http://audacity.sourceforge.net/ (http://audacity.sourceforge.net/)

Is what we use :)
Title: Re: engine sounds
Post by: bugsblake on June 03, 2013, 09:58:33 am
thanks murkz! :)

EDIT: thats a great little program! simple to use and quick! nice one! :D

now gonna go through another vehicle .js and see if i can get them working as they should!

thanks
Title: Re: engine sounds
Post by: bugsblake on June 03, 2013, 12:19:16 pm
ok i have start up sound and idle sound running fine. cant seem to work out the shutdown sound? any advice please?

also i have sound of engine rev when driving but it sounds pants! how can i make this better? i have other sounds of the engine at higher revs, can i use that? if so whats the best way to do it?

im learning from looking at other .js files but its all new to me so any help would be great! thanks

ps. while your reading this, does anyone know how to set up the handbreak? ive not seen it in any .js files yet! is it even implimented yet or is it like the lights? something yet to be added? and horn, does that work? how is that set up in the .js file? or is that not added yet?

thanks for your help guys! :D
Title: Re: engine sounds
Post by: giucam on June 03, 2013, 12:51:13 pm
Getting the sounds to sound good is not easy. You could use sounds at higher revs but i don't getting all of them to merge is easy at all. In my latest script i keep the idle, off and on sounds always going, and i adjust the volumes of them depending on the throttle, engine rpm and speed of the car. that way the transition between, say, full throttle and no throttle is quite smooth.

for the horn you just need to play the horn sound when you get the action event.
the shutdown sound shouldn't be a problem too. just play it when you get the engine event with the argument == false.
Title: Re: engine sounds
Post by: bugsblake on June 03, 2013, 01:01:14 pm
thanks for the advice giucam! i'll have a crack at that! will be back if i have any problems! :)
Title: Re: engine sounds
Post by: bugsblake on June 03, 2013, 01:16:39 pm
oh one other thing, do we have any kind of eta on vehicle headlights yet? just seems like such a shame to be limited to daytime driving! night driving round mountain top roads would be sick! :P cant wait for headlights! :D
and break lights, interior light, reverse..... but to tell the truth id be happy with just the headlights working so i can see where im going! ;)
Title: Re: engine sounds
Post by: M7 on June 03, 2013, 03:04:03 pm
I find The hardest to get right is high rev sound for like muscle cars. With giucam script (BMW) you can use separate sound for acceleration and deceleration which helps a lot. Still the acceleration sound is still quite tough to get right.
Title: Re: engine sounds
Post by: bugsblake on June 03, 2013, 03:16:17 pm
hi M7. yh the acceleration is all i got left to sort out! just sounds pants at the moment. everything else is working fine now. only other thing i need to know is how to setup the hand break as ive not seen it set in any other js files! do you know how to go about that?

anyway should have it all cracked by tonight, then i can update my mustang and charger downloads! also have a problem with the dds textures not showing on my charger? dont know why? no errors at all! they just dont show? anyway they are in the current download otx file. so just need to sort that and its done!

both cars still need work on the suspension as its like feeling every bump in the road but im sure with a bit of playing around with the settings i'll get there in the end! :)
Title: Re: engine sounds
Post by: Atrax on June 04, 2013, 07:20:55 am
I really don't like current sounds of any vehicle, they all sound too synthetic which is not good. Also M3 and Lambo (amongst other vehicles) both have very poor sounds, only way to describe it is "jagged synthetic sound" (too high pitched, especialy M3). Hope that will improve over time. Also turning left or right doesn't feel right either, just as handling, but I guess that's b/c physics are very rudimentary at this point. Hopefuly that will change as we progress. :)
Title: Re: engine sounds
Post by: ZeosPantera on June 04, 2013, 12:16:37 pm
The sound delivery method hopefully is just temporary. Having them generated per tick and blended in-game without the pitch change cheat should be the ultimate goal.
Title: Re: engine sounds
Post by: Atrax on June 04, 2013, 12:36:57 pm
The sound delivery method hopefully is just temporary. Having them generated per tick and blended in-game without the pitch change cheat should be the ultimate goal.

Agreed
Title: Re: engine sounds
Post by: M7 on June 22, 2013, 11:40:44 am
would be so cool to have this kind of tool as open source for vehicle sound creation  Fuzzy Logic Engine Sound Simulation (http://www.youtube.com/watch?v=MaJlUyA8Kr0#ws)

Title: Re: engine sounds
Post by: ZeosPantera on June 22, 2013, 12:00:31 pm
We certainly need something more substantial to make the sounds, sound more natural. Pitch control isn't going to be enough.

Edit.. Why not message that guy and see if he is willing to share his simulation code for use in OT? It says it was just a project he did for university.

The seven sound mix system seems to be the defacto standard.
Title: Re: engine sounds
Post by: bugsblake on June 22, 2013, 12:08:32 pm
thats a nice program there M7! but yes we need a new way to work with engine sounds in outerra for sure!

looking at the way everything is done in outerra, im sure we will have something great in the end! just like everything else! :)
Title: Re: engine sounds
Post by: M7 on June 23, 2013, 01:24:37 pm
now check these out

http://www.sonory.org/download-samples.html (http://www.sonory.org/download-samples.html)
Title: Re: engine sounds
Post by: bugsblake on June 23, 2013, 01:44:11 pm
I like! but can we use them? I mean can we use them so they will sound like that in outerra?
Title: Re: engine sounds
Post by: M7 on June 23, 2013, 01:54:11 pm
I dont think it could sound like that unless somebody can make an advance script where you can use more than one sample onload and off load. I guess only Giucam could do such script.
Title: Re: engine sounds
Post by: bugsblake on June 23, 2013, 01:56:02 pm
if anyone can do it im sure he can! :D
Title: Re: engine sounds
Post by: M7 on June 23, 2013, 03:01:11 pm
here's a thread where the developper describe how it could be scripted.

http://sonory.org/forum/5-Engine-sound-in-games/6-how-can-i-get-the-engine-sound-from-the-samples.html (http://sonory.org/forum/5-Engine-sound-in-games/6-how-can-i-get-the-engine-sound-from-the-samples.html)
Title: Re: engine sounds
Post by: giucam on June 23, 2013, 03:11:29 pm
That thread is interesting, it looks like all it needs is indeed setting the pitch and volumes of the samples only. I'll give it a try one of these days.
Title: Re: engine sounds
Post by: bugsblake on June 23, 2013, 03:14:00 pm
sweet! :D look forward to it! ;)
Title: Re: engine sounds
Post by: ZeosPantera on June 23, 2013, 03:18:46 pm
If anyone wants I have access to very good recorders and several loud cars. I could take samples at every 1k rpm. I'd need a wind cover first because the Mic's on my tascam are super sensitive.
Title: Re: engine sounds
Post by: giucam on June 24, 2013, 05:03:14 pm
I'm getting a quite good sound now with the samples from sonory.org above. The method explained in that thread doesn't work so good since you can distinctly hear when it changes samples, so instead of using only the two samples above and below the rpm value, i use a Cauchy-ish function (https://en.wikipedia.org/wiki/Cauchy_distribution) to set the volumes of all the samples,
This way also samples of very-ish different rpm values than the current one have a little volume, which gets bigger as the engine rpm comes nearer to it.

I've yet to try it in Outerra, but it should work all right. I recorded a snippet of the sound though: https://www.dropbox.com/s/j75nbyi0j0b4va4/v8.ogg (https://www.dropbox.com/s/j75nbyi0j0b4va4/v8.ogg)

I have a question for cameni though: is it playing sounds relatively heavy? Should i stop the samples with volume near 0 instead of letting them run, or is it not worth the effort?
Title: Re: engine sounds
Post by: M7 on June 24, 2013, 05:12:45 pm
Yep sound pretty good already. How many samples did you use?
Title: Re: engine sounds
Post by: cameni on June 25, 2013, 12:22:28 am
I have a question for cameni though: is it playing sounds relatively heavy? Should i stop the samples with volume near 0 instead of letting them run, or is it not worth the effort?
We can optimize that out internally. Actually, once there's a decent model of sound mixing, we can implement it directly into the vehicle interface.
Title: Re: engine sounds
Post by: giucam on June 25, 2013, 10:49:20 am
Yep sound pretty good already. How many samples did you use?
That snippet was done with 7 'on' samples and 7 'off'.
Title: Re: engine sounds
Post by: angrypig on June 25, 2013, 10:58:48 am
on sonory page you can download V8 engines with 31 samples off and 31 samples on :)
Title: Re: engine sounds
Post by: M7 on June 25, 2013, 11:05:06 am
 I just imagine the number of  lines it will take to use 62 samples in the vehicle script ;D
Title: Re: engine sounds
Post by: giucam on June 25, 2013, 11:07:46 am
on sonory page you can download V8 engines with 31 samples off and 31 samples on :)

Yeah, i'm using those, i'm just not makeing use of all of them yet.
Title: Re: engine sounds
Post by: angrypig on June 25, 2013, 11:08:28 am
there are loops in Javascript :) so all you need is a list with file names...
Title: Re: engine sounds
Post by: angrypig on June 25, 2013, 11:17:38 am
for those who want to use those samples here is "how to":
http://www.sonory.org/forum/5-Engine-sound-in-games/6-how-can-i-get-the-engine-sound-from-the-samples.html (http://www.sonory.org/forum/5-Engine-sound-in-games/6-how-can-i-get-the-engine-sound-from-the-samples.html)
Title: Re: engine sounds
Post by: hhrhhr on July 04, 2013, 12:15:17 pm
my attempt to implement this "how to" (simple gearbox, 32 sound samples, "equalizer" shows the volume level for each sample):

bandicam 2013 07 04 19 54 10 575 (http://www.youtube.com/watch?v=q3F2m66WOBg#)

I do not quite like the idea of ‚Äč‚Äčsimultaneous download and play as many sounds. I tried to stop the unnecessary sounds and play only the current 2-3, but there are problems (clicks, pops).

or Outerra has no problem with the use of a large number of sounds?

test model and V8 sound bank from sonory.org - https://dl.dropboxusercontent.com/u/95785614/sound_test.hhrhhr.otx (https://dl.dropboxusercontent.com/u/95785614/sound_test.hhrhhr.otx)
Title: Re: engine sounds
Post by: murkz on July 04, 2013, 12:23:06 pm
Excellent hr, a very good start.
Title: Re: engine sounds
Post by: ZeosPantera on July 04, 2013, 12:24:50 pm
I am without words.. What a contribution! And to get the visuals in-game.

EDIT: I set the Engine Power to 150 300 in the script and it shows it off a bit better. Will mess with gearing. SOUNDS GREAT!

EDIT2: Played around and decided on these tweaks.

Code: [Select]
// !!! not optimized for multiple vehicles in scene !!!


const PI = Math.PI;
const PI_2 = PI / 2.0;
const DEG2RAD = PI / 180.0;
const RAD2DEG = 180.0 / PI;

// dashboard
const MAX_RPM = 9000.0
const MAX_SPEED = 180.0
const MAX_ANGLE = 270.0

const MS2KMH2RAD = 3.6 * MAX_ANGLE / MAX_SPEED * DEG2RAD;
const HOURS2RAD = 360.0 / 12 * DEG2RAD;
const MIN2RAD = 360.0 / 60 * DEG2RAD;
const RPM2RAD = MAX_ANGLE / MAX_RPM * DEG2RAD


// engine
const EK = 300;
const BK = 2000;
//             1      2      3     4     5     R(not work now)
const gears = [4.124, 2.641, 1.88, 1.40, 1.05, -5.224];
const ratio = 3.0;


// 16 samples
const rpm_val = [756,
                 859,  984,  1126, 1289, 1476, 1690, 1935, 2215,
                 2536, 2904, 3324, 3806, 4358, 4989, 5712, 6540,
                 9999];
const sound_path = "sound_v8/";

const rpm_num = rpm_val.length - 2;

const RPM_IDLE2RAD = rpm_val[0] / MAX_RPM * MAX_ANGLE * DEG2RAD;

/*
// V4
var rpm_val = [ 756,
               1052, 1126, 1205, 1289, 1380, 1476, 1579,
               1690, 1808, 1935, 2070, 2215, 2370, 2536,
               2714, 2904, 3107, 3324, 3557, 3806, 4073,
               4358, 4663, 4989, 5338, 5712, 6112, 6540,
               9999 ];
// V8
var rpm_val = [ 756,
               859, 919, 984,
               1052, 1126, 1205, 1289, 1380, 1476, 1579,
               1690, 1808, 1935, 2070, 2215, 2370, 2536,
               2714, 2904, 3107, 3324, 3557, 3806, 4073,
               4358, 4663, 4989, 5338, 5712, 6112, 6540,
               9999 ];
// V12
var rpm_val = [ 756,
                803,  859,  919,  984,  1052, 1126, 1205,
                1289, 1380, 1476, 1579, 1690, 1808, 1935,
               9999 ];
*/


var rpm_vol = [];
var rpm_pit = [];
var rpm_snd = [];
var rpm_snd_load = [];
var rpm_src = [];
var rpm_src_load = [];

for (var i = 0; i < rpm_val.length; i++) {
    rpm_vol[i] = 0;
    rpm_pit[i] = 0;
    rpm_snd[i] = 0;
    rpm_snd_load[i] = 0;
    rpm_src[i] = 0;
    rpm_src_load[i] = 0;
}

function process_engine_sound(rpm)
{
    if (rpm <= rpm_val[1]) {
        // only first sample
        rpm_pit[1] = rpm / rpm_val[1];
        rpm_vol[1] = 1.0;
        for (var i = 2; i <= rpm_num; i++)
            rpm_vol[i] = 0.0;

    } else if (rpm <= rpm_val[rpm_num]) {
        // mix 2 samples
        for (var i = 1; i <= rpm_num; i++) {
            if (rpm > rpm_val[i+1] || rpm <= rpm_val[i-1]) {
                rpm_vol[i] = 0.0;
            } else {
                if (rpm > rpm_val[i]) {
                    var rpm_d = rpm_val[i+1] - rpm_val[i];
                    var vol_l = (rpm_val[i+1] - rpm) / rpm_d;
                    var vol_h = (rpm - rpm_val[i]) / rpm_d;

                    // sin
                    rpm_vol[i] = Math.sin(vol_l * PI_2);
                    rpm_vol[i+1] = Math.sin(vol_h * PI_2);

                    rpm_pit[i] = rpm / rpm_val[i];
                    rpm_pit[i+1] = rpm / rpm_val[i+1];
                }
            }
        }
    } else {
        // only last sample
        rpm_pit[rpm_num] = rpm / rpm_val[rpm_num];
        rpm_vol[rpm_num] = 1.0;
        for (var i = 1; i < rpm_num; i++)
            rpm_vol[i] = 0.0;
    }
}


// equalizer mesh init
var band = [];
for (var i = 0; i < 16; i++) {
    band[i] = 0;
}


//invoked only the first time the model is loaded, or upon reload
function init_chassis()
{
    this.log_inf("don't forget to assign ShiftUp and ShiftDown keys");
    var wheelparam_left = {
        radius: 0.365,
        width: 0.220,
        suspension_max: 0.1,
        suspension_min: -0.25,
        suspension_stiffness: 18.0,
        damping_compression: 0.4,
        damping_relaxation: 0.12,
        slip: 0.6,
slip_lateral_coef: 1.5,
        rotation: -1
    };

    var wheelparam_right = {
        radius: 0.365,
        width: 0.220,
        suspension_max: 0.1,
        suspension_min: -0.25,
        suspension_stiffness: 18.0,
        damping_compression: 0.4,
        damping_relaxation: 0.12,
        slip: 0.75,
slip_lateral_coef: 1.3,
        rotation: 1
    };

    var vehicle_params = {
        mass: 1100.0,
        steering: 2.0,
        steering_ecf: 60.0,
        centering: 3.0,
        centering_ecf: 40.0,
        com: {x: 0.0, y: 0.0, z: -0.0}
    };

    this.add_wheel("wfl", wheelparam_left);
    this.add_wheel("wfr", wheelparam_right);
    this.add_wheel("wrl", wheelparam_left);
    this.add_wheel("wrr", wheelparam_right);


    //sounds
    for (var i = 1; i <= rpm_num; i++) {
        rpm_snd[i] = this.load_sound("" + sound_path + rpm_val[i] + ".ogg");
        rpm_src[i] = this.add_sound_emitter("snd_engine");
        rpm_snd_load[i] = this.load_sound("" + sound_path + rpm_val[i] + "_P.ogg");
        rpm_src_load[i] = this.add_sound_emitter("snd_engine_load");
    };
    this.log_inf("loaded " + rpm_num*2 + " engine sound samples");

    return vehicle_params;
}


//invoked for each new instance of the vehicle
function init_vehicle()
{
    this.started = 0;
    this.speed_old = 0;
    this.gear_idx = 0;


    this.body = this.get_geomob(0);

    var cam_fps = this.body.get_joint_local_pos(this.body.get_joint("cam_fps"));
    this.set_fps_camera_pos(cam_fps);

    this.arrow_speed = this.body.get_joint("arrow_speed");
    this.arrow_rpm = this.body.get_joint("arrow_rpm");
    this.arrow_hour = this.body.get_joint("arrow_clock_hour");
    this.arrow_min = this.body.get_joint("arrow_clock_min");

    this.arrow_1 = this.body.get_joint("arrow_1");
    this.arrow_2 = this.body.get_joint("arrow_2");
    this.arrow_3 = this.body.get_joint("arrow_3");
    this.arrow_4 = this.body.get_joint("arrow_4");
    this.arrow_5 = this.body.get_joint("arrow_5");


    // sounds
    this.snd = this.sound();
    for (var i = 1; i <= rpm_num; i++) {
        this.snd.set_ref_distance(rpm_src[i], 5.0);
        this.snd.set_ref_distance(rpm_src_load[i], 5.0);
    };


    // "equalizer" meshes
    for (var i = 0; i < 16; i++) {
        band[i] = this.body.get_joint("band" + (i+1));
    }
}


//invoked when engine starts or stops
function engine(start)
{
    if (start) {
        this.started = 1;
        for (var i = 1; i <= rpm_num; i++) {
            rpm_vol[i] = 0.0;
            this.snd.play_loop(rpm_src[i], rpm_snd[i]);
            this.snd.play_loop(rpm_src_load[i], rpm_snd_load[i]);
        }
    } else {
        this.started = 0;
        for (var i = 1; i <= rpm_num; i++) {
            rpm_vol[i] = 0.0;
            this.snd.stop(rpm_src[i]);
            this.snd.stop(rpm_src_load[i]);
        }
    }
}


function action(k, v, dt)
{
    switch(k) {
    case AShiftUp: {
        if (v)
            this.gear_idx = this.gear_idx < 4 ? this.gear_idx + 1 : 4;
        break;
    }
    case AShiftDown: {
        if (v)
            this.gear_idx = this.gear_idx > 0 ? this.gear_idx - 1 : 0;
        break;
    }
    case AReverse: {
        if (v)
            this.gear_idx = this.gear_idx < 5 ? 5 : 0;
        break;
    }
    }
}

//invoked each frame to handle the inputs and animate the model
function update_frame(dt, engine, brake, steering)
{
    var steer = steering * 0.5;
    this.steer(0, steer);
    this.steer(1, steer);

    if (this.started) {
        var eng = engine * EK * gears[this.gear_idx] * ratio;
        this.wheel_force(2, eng);
        this.wheel_force(3, eng);
    }

    var brake_idle = (1.0 - engine) * BK * 0.1;
    var brake_front = brake * BK * 0.5 + brake_idle;
    var brake_rear = brake * BK + brake_idle;
    this.wheel_brake(0, brake_front);
    this.wheel_brake(1, brake_front);
    this.wheel_brake(2, brake_rear);
    this.wheel_brake(3, brake_rear);

    this.animate_wheels();


    // dashboard
    // // speed
    var spd = Math.abs(this.speed() * MS2KMH2RAD);
    this.body.rotate_joint_orig(this.arrow_speed, spd, {x: 0, y: 1, z: 0});

    // // rpm
    var rpm = 0.0;
    var max_wheel_rpm = Math.abs(Math.max(this.wheel(2).rpm, this.wheel(3).rpm));
    if (this.started)
        rpm += max_wheel_rpm * gears[this.gear_idx] * ratio * RPM2RAD + RPM_IDLE2RAD;
    this.body.rotate_joint_orig(this.arrow_rpm, rpm, {x: 0, y: 1, z: 0});

    // // clock
    var time = new Date();
    var hour = time.getHours() * HOURS2RAD;
    var mins = time.getMinutes() * MIN2RAD;
    this.body.rotate_joint_orig(this.arrow_hour, hour, {x: 0, y: 1, z: 0});
    this.body.rotate_joint_orig(this.arrow_min, mins, {x: 0, y: 1, z: 0});

    // // accelerate
    var acc = (this.speed() - this.speed_old) / dt;
    this.speed_old = this.speed();
    acc *= 12 * DEG2RAD; // +/- 6 m/s^2
    this.body.rotate_joint_orig(this.arrow_1, acc, {x: 0, y: 1, z: 0});

    // // gears
    var gear = this.gear_idx * 30 * DEG2RAD;
    this.body.rotate_joint_orig(this.arrow_2, gear, {x: 0, y: 1, z: 0});

    // // throtle
    this.body.rotate_joint_orig(this.arrow_3, engine * PI_2, {x: 0, y: 1, z: 0});
    this.body.rotate_joint_orig(this.arrow_4, brake * PI_2, {x: 0, y: -1, z: 0});


    // FIXME:
    var torque = engine;


    // engine sounds
    if (this.started) {
        rpm = max_wheel_rpm * gears[this.gear_idx] * ratio + rpm_val[0];
        process_engine_sound(rpm);

        // set pitch and volume
        for (var i = 1; i <= rpm_num; i++) {
            this.snd.set_pitch(rpm_src[i], rpm_pit[i]);
            this.snd.set_gain(rpm_src[i], rpm_vol[i] * (1.0 - torque));
            this.snd.set_pitch(rpm_src_load[i], rpm_pit[i]);
            this.snd.set_gain(rpm_src_load[i], rpm_vol[i] * torque);
        }
    }

    // debug "equalizer"
    for (var i = 1; i <= rpm_num; i++) {
        var s = Math.ceil(rpm_vol[i] * 20.0) * 0.01; // 1/20 * 0.20m (lenght of band);
        var move = {x: 0, y: s * 0.5, z: s * 0.866};   // sin(30), cos(30)
        this.body.move_joint_orig(band[i-1], move);
    }

}

Using my Gas Pedal instead of keys is way better. Pretty much just gearing, engine and suspension/tire tweaks. I wouldn't dare touch the other code.
Title: Re: engine sounds
Post by: giucam on July 04, 2013, 01:47:25 pm
Great work hhrhhr!! The sin really makes the trick on not showing the switching of the samples. How did you found it out, just by trial and error?
Title: Re: engine sounds
Post by: hhrhhr on July 04, 2013, 02:37:31 pm
The sin really makes the trick on not showing the switching of the samples
vol * 0.667 + 0.333 can be used instead of the sine ;) but then you also need to keep an eye on 0.0 <= vol <= 1.0.

2ZeosPantera
for the best results we need to count the current torque. now "torque = engine",  for the "discrete" keyboard is bad, for analog control - a little better, but still not what we need.
Title: Re: engine sounds
Post by: giucam on July 04, 2013, 04:03:04 pm
I managed to port hhrhhr's sound code to my script, works great.
I'm gonna test it with the BMW next, and hopefully release a new version in some days.
Title: Re: engine sounds
Post by: hhrhhr on July 04, 2013, 04:18:28 pm
I managed to port hhrhhr's sound code to my script, works great.
Pay attention to the first line: "// !!! not optimized for multiple vehicles in scene !!!"

for the release version the part of the global constants should be moved to init_vehicle().
Title: Re: engine sounds
Post by: giucam on July 04, 2013, 04:31:19 pm
Yeah, but i actually only took the process_engine_sound function, i didn't use the other things.

still, the constants shouldn't be a problem for multiple vehicles, they should instead reduce the overhead of multiple per-object variables.
Title: Re: engine sounds
Post by: hhrhhr on July 04, 2013, 04:41:38 pm
at least array of pitch and volume should be unique for every vehicle, otherwise the all the vehicles in the scene will be played the same way.
Title: Re: engine sounds
Post by: giucam on July 04, 2013, 05:02:16 pm
Ah yeah, right. But i don't keep them stored, i just apply the calculated gain and pitch.