Jump to content
Sign in to follow this  
Mark XIII (DayZ)

Arma 2 Sound Modding 101.

Recommended Posts

Thank you guys! The problem is, the Source is already louder than the Engine sounds, but the engine is ingame a bit louder. I thought it may have something to do with the volume = entry, corze the sound is getting quieter after the tank is rolling...

EDIT: With your entry OS I get a strange thing ingame, at the start, when the tank is going to roll the sound is really loud, but while the tank is driving faster the sound is getting more quieter till I can't hear it at all...

Jarhead

Edited by LordJarhead

Share this post


Link to post
Share on other sites

Might be the last entry

Have you tried deleting the last bit so its just

volume = "engineOn*camPos*(1-grass)*((rpm factor[0.3, 1]))";

This should just be at so that when the RPM of the engine is low the sound is at 0.3 -75% volume, and then as the RPM gets higher the sound gets louder. You could also use speed rather than rpm

volume = "engineOn*camPos*(1-grass)*((speed factor[0.3, 1]))";

Share this post


Link to post
Share on other sites

Be VERY careful with normalisation for audio samples, make sure your sample is a candidate for it before you do it.

I thought it would be a good idea to batch normalise some of my explosion and gunfire libraries... it in effect killed any of the wow factor for the explosions etc, as naturally an explosion should be a significant audio event compared to the rest of a sample due to the nature of loudness and bass levels present.

If you are normalising audio, I recommend Adobe Soundbooth as it has a pretty nice batch system.

Edited by rexehuk

Share this post


Link to post
Share on other sites

Ok, I played around with the config and so but I getting totally crazy here. I know youre concern OS, and its worked fine with the single one "volume = "engineOn*camPos*(1-grass)*((rpm factor[0.3, 1]))";" but with that entry I getting an strange stereo sound, sounds like an immediately echo, like the sound is getting played twice with a low difference of 0.5 seconds. Maybe because the sound is getting played for each track?

So here is my config with the sound to quiet:

class Sounds

{

class Engine

{

sound[] = {"\JSRS_Abrams\Ext_High",1,1,500};

frequency = "(randomizer*0.20+1.0)*rpm";

volume = "engineOn*camPos*(rpm factor[0.2, 1])";

};

class EngineHighOut

{

sound[] = {"\JSRS_Abrams\Ext_Low",1, 1, 500};

frequency = "(randomizer*0.20+1.0)*rpm";

volume = "engineOn*camPos*(rpm factor[0.5, 1])";

cone[] = {1.750000, 2.000000, 1.500000, 1.250000};

};

class IdleOut

{

sound[] = {"\JSRS_Abrams\Ext_Idle",1,1,300};

frequency = "0.90+(0.40*rpm)";

volume = "1.25*engineOn*camPos*(rpm factor[0.5, 0.15])";

cone[] = {1.750000, 2.000000, 1.500000, 1.250000};

};

class NoiseOut

{

sound[] = {"\JSRS_Abrams\Ext_Noises",1,1,400};

};

class ThreadsOutH0

{

sound[] = {"JSRS_Abrams\Hard",1,1,350};

frequency = "1";

volume = "engineOn*camPos*(1-grass)*((rpm factor[0.3, 1]) min (rpm factor[0.6, 0.3]))";

};

class ThreadsOutH1

{

sound[] = {"JSRS_Abrams\Hard",1,1,350};

frequency = "1";

volume = "engineOn*camPos*(1-grass)*((rpm factor[0.5, 1]) min (rpm factor[0.8, 0.5]))";

};

class ThreadsOutH2

{

sound[] = {"JSRS_Abrams\Hard",1,1,350};

frequency = "1";

volume = "engineOn*camPos*(1-grass)*((rpm factor[0.65, 1]) min (rpm factor[0.9, 0.65]))";

};

class ThreadsOutH3

{

sound[] = {"JSRS_Abrams\Hard",1,1,350};

frequency = "1";

volume = "engineOn*camPos*(1-grass)*((rpm factor[0.8, 1]) min (rpm factor[1.2, 0.8]))";

};

class ThreadsOutH4

{

sound[] = {"JSRS_Abrams\Hard",1,1,350};

frequency = "1";

volume = "engineOn*camPos*(1-grass)*((rpm factor[1, 1]) min (rpm factor[2.0, 1]))";

};

class ThreadsOutS0

{

sound[] = {"JSRS_Abrams\Soft",1,1,350};

frequency = "1";

volume = "engineOn*camPos*grass*((rpm factor[0.3, 1]) min (rpm factor[0.6, 0.3]))";

};

class ThreadsOutS1

{

sound[] = {"JSRS_Abrams\Soft",1,1,350};

frequency = "1";

volume = "engineOn*camPos*grass*((rpm factor[0.5, 1]) min (rpm factor[0.8, 0.5]))";

};

class ThreadsOutS2

{

sound[] = {"JSRS_Abrams\Soft",1,1,350};

frequency = "1";

volume = "engineOn*camPos*grass*((rpm factor[0.65, 1]) min (rpm factor[0.9, 0.65]))";

};

class ThreadsOutS3

{

sound[] = {"JSRS_Abrams\Soft",1,1,350};

frequency = "1";

volume = "engineOn*camPos*grass*((rpm factor[0.8, 1]) min (rpm factor[1.2, 0.8]))";

};

class ThreadsOutS4

{

sound[] = {"JSRS_Abrams\Soft",1,1,350};

frequency = "1";

volume = "engineOn*camPos*grass*((rpm factor[1, 1]) min (rpm factor[2.0, 1]))";

};

class EngineIn

{

sound[] = {"\JSRS_Abrams\Int_High",2,1};

frequency = "0.40+(0.60*rpm)";

};

class IdleIn

{

sound[] = {"\JSRS_Abrams\Int_Idle",1,1};

};

class NoiseIn

{

sound[] = {"\JSRS_Abrams\Int_Noises",1,1};

};

};

class Turrets: Turrets

{

class MainTurret: MainTurret

{

soundServo[] = {"\JSRS_Abrams\Turret",db-40,1,10};

};

};

};

};

So, now I tried to make this an ALL threads entries:

{

sound[] = {"\JSRS_Abrams\Ext_Noises",1,1,400};

};

class ThreadsOutH0

{

sound[] = {"JSRS_Abrams\Hard",1,1,350};

frequency = "1";

volume = "engineOn*camPos*(1-grass)*((rpm factor[0.3, 1]) min (rpm factor[0.6, 1]))";

};

Then the sound is playing while standing AND rolling...

I know, there is a solution, a simple one, but I can't find it...

Jarhead

Share this post


Link to post
Share on other sites

Does this actually work

((rpm factor[0.3, 1]) min (rpm factor[0.6, 1]))

in the last snippet? Both being up ramps.

Share this post


Link to post
Share on other sites
Does this actually work

((rpm factor[0.3, 1]) min (rpm factor[0.6, 1]))

in the last snippet? Both being up ramps.

No, the track sound will be played even if the tank is standing.

What does the trackentries mean ThreadsOutH0, 1, 2, 3, and so on? The figures in each entry are getting bigger! [0.6, 0.3]))"; [0.8, 0.5]))"; [0.9, 0.65]))"; and so on. Why? are these divided on the speed? Could it be that the last entries are for the highest and the first for the lowest rate of speed?

Jarhead

Share this post


Link to post
Share on other sites

It's about blending sounds. As rpm increases new sound fade in and previous sound fade out. Visualized, goes something like this:

rpm factor [0.2,0.4]; //up ramp
   ******
  *
***
rpm factor [0.6,0.4]; //down ramp
*****
    *
     ****
rpm factor [0.2,0.4] min rpm factor [0.6,0.4]; //up & down triangle
   *
  * *
***   ****
the next sound would then be something like
     *
    * *
*****   **
but the last sound would be simpler, like
        *
       *
********
which only takes a single ramp and no min function, like
rpm factor [0.8,1.0]; //final up ramp

Simple expression

Note the new interpolate method. Maybe irrelevant to your application, but I used it on the AN-2 config I sent you a while back. In order not to let a sound turn completely off, preventing sudden sound increase from the other sounds playing, I end with a max 0.01. Example of this expression for EngineLowOut:

volume="0.5*camPos*engineOn*(rpm interpolate[0.50, 2.00, 0.0, 1.55]) * ((thrust interpolate[2.00,0.0,1.00,0.1]) max ((speed interpolate [0,10,1,0]) [b]max 0.01[/b]))";

Note that this is partly guesswork (please for the love of sound fans, document the sound engine :p), but I got pretty close to the results I was going for, which was different tarmac idle from approach idle (real world is a bit more complex).

Finding the range of i.e. rpm or speed can be a challenge.

For one particular "view configuration" (inside/outside), you want to use the max 0.01 trick rather than allow it to shut completely off, when you're dealing with multiple sounds. I.e. in a tank you may have three sounds; noises, engine, and tracks. When still, there shouldn't be any noises, but if you shut down the sound completely, the other two are raised. Using max 0.01 prevents this raise, but it's effectively shut down.

I use "debug waves" to more easily spot/hear problems, as good blended ones can be hard to notice. Also I set up the curves in Excel first (using factor and interpolate). However, most of my stuff (at least in Arma) is ambience, not vehicles (C130 and AN-2 are kind of exceptions :p).

Anyone (incl. devs), please correct me if I messed something up (not unlikely).

Share this post


Link to post
Share on other sites

oooOOOOooo Ich steig da echt nicht mehr durch jetzt!

I don't get this. I know what you mean (somehow) but I cant get it to work. Please, would it be possible that anyone could make me a config which making the sound of the tracks louder? I tried everything... This is my config atm:

class CfgPatches

{

class JSRS_Abrams

{

units[] = {};

weapons[] = {};

requiredVersion = 0.1;

requiredAddons[] = {"CATracked_E","CATracked"};

version = "2011-04-12";

projectName = "JSRS - Jarheads Sounds Redeployment Systems";

author = "LordJarhead";

};

};

class Sounds;

class Engine;

class Turrets;

class MainTurret;

class CfgVehicles

{

class Tank;

class M1A1: Tank

{

soundEngineOnInt[] = {"\JSRS_Abrams\Int_Start",1,1};

soundEngineOnExt[] = {"\JSRS_Abrams\Ext_Start",2.51189,1,350};

soundEngineOffInt[] = {"\JSRS_Abrams\Int_Off",1,1};

soundEngineOffExt[] = {"\JSRS_Abrams\Ext_Off",2.51189,1,350};

class SoundEvents

{

class AccelerationIn

{

sound[] = {"\JSRS_Abrams\Int_Acc",1.000000,1};

limit = 0.150000;

expression = "engineOn*(1-camPos)*2*gmeterZ*((speed factor[0.5, 5]) min (speed factor[5, 0.5]))";

};

class AccelerationOut

{

sound[] = {"\JSRS_Abrams\Ext_Acc",3.000000,1,450};

limit = 0.150000;

expression = "engineOn*camPos*2*gmeterZ*((speed factor[0.5, 5]) min (speed factor[5, 0.5]))";

};

};

class Sounds

{

class Engine

{

sound[] = {"\JSRS_Abrams\Ext_High",1,1,500};

frequency = "(randomizer*0.20+1.0)*rpm";

volume = "engineOn*camPos*(rpm factor[0.2, 1])";

};

class EngineHighOut

{

sound[] = {"\JSRS_Abrams\Ext_Low",1, 1, 500};

frequency = "(randomizer*0.20+1.0)*rpm";

volume = "engineOn*camPos*(rpm factor[0.5, 1])";

cone[] = {1.750000, 2.000000, 1.500000, 1.250000};

};

class IdleOut

{

sound[] = {"\JSRS_Abrams\Ext_Idle",1,1,300};

frequency = "0.90+(0.40*rpm)";

volume = "1.25*engineOn*camPos*(rpm factor[0.5, 0.15])";

cone[] = {1.750000, 2.000000, 1.500000, 1.250000};

};

class NoiseOut

{

sound[] = {"\JSRS_Abrams\Ext_Noises",1,1,400};

};

class ThreadsOutH0

{

sound[] = {"JSRS_Abrams\Hard",1,1,350};

frequency = "1";

volume = "engineOn*camPos*(1-grass)*((rpm factor[0.3, 0.6]) min (rpm factor[0.6, 0.3]))";

};

class ThreadsOutH1

{

sound[] = {"JSRS_Abrams\Hard",2,1,350};

frequency = "1";

volume = "engineOn*camPos*(1-grass)*((rpm factor[0.5, 0.8]) min (rpm factor[0.8, 0.5]))";

};

class ThreadsOutH2

{

sound[] = {"JSRS_Abrams\Hard",2,1,350};

frequency = "1";

volume = "engineOn*camPos*(1-grass)*((rpm factor[0.65, 0.9]) min (rpm factor[0.9, 0.65]))";

};

class ThreadsOutH3

{

sound[] = {"JSRS_Abrams\Hard",2,1,350};

frequency = "1";

volume = "engineOn*camPos*(1-grass)*((rpm factor[0.8, 1.2]) min (rpm factor[1.2, 0.8]))";

};

class ThreadsOutH4

{

sound[] = {"JSRS_Abrams\Hard",2,1,350};

frequency = "1";

volume = "engineOn*camPos*(1-grass)*((rpm factor[1, 2.0]) min (rpm factor[2.0, 1]))";

};

class ThreadsOutS0

{

sound[] = {"JSRS_Abrams\Soft",2,1,350};

frequency = "1";

volume = "engineOn*camPos*grass*((rpm factor[0.3, 0.6]) min (rpm factor[0.6, 0.3]))";

};

class ThreadsOutS1

{

sound[] = {"JSRS_Abrams\Soft",2,1,350};

frequency = "1";

volume = "engineOn*camPos*grass*((rpm factor[0.5, 0.8]) min (rpm factor[0.8, 0.5]))";

};

class ThreadsOutS2

{

sound[] = {"JSRS_Abrams\Soft",2,1,350};

frequency = "1";

volume = "engineOn*camPos*grass*((rpm factor[0.65, 0.9]) min (rpm factor[0.9, 0.65]))";

};

class ThreadsOutS3

{

sound[] = {"JSRS_Abrams\Soft",2,1,350};

frequency = "1";

volume = "engineOn*camPos*grass*((rpm factor[0.8, 1.2]) min (rpm factor[1.2, 0.8]))";

};

class ThreadsOutS4

{

sound[] = {"JSRS_Abrams\Soft",2,1,350};

frequency = "1";

volume = "engineOn*camPos*grass*((rpm factor[1, 2.0]) min (rpm factor[2.0, 1]))";

};

class EngineIn

{

sound[] = {"\JSRS_Abrams\Int_High",2,1};

frequency = "0.40+(0.60*rpm)";

};

class IdleIn

{

sound[] = {"\JSRS_Abrams\Int_Idle",1,1};

};

class NoiseIn

{

sound[] = {"\JSRS_Abrams\Int_Noises",1,1};

};

};

class Turrets: Turrets

{

class MainTurret: MainTurret

{

soundServo[] = {"\JSRS_Abrams\Turret",db-40,1,10};

};

};

};

};

So, I tried to make the entries higher. But the sound was getting quieter. Than I made the entries lower, than the sound was playing all the time, on the rolling AND on the standing...

I getting under with that shit...

Jarhead

Share this post


Link to post
Share on other sites

You cannot as said before. You need a more loud source sound file.

Share this post


Link to post
Share on other sites

The Sound file is already louder than the engine sound file, as said before :) But the engine ingame is louder... strange. Thats why I asking! I cannot make it louder, its getting broken.

Ah, forget about this. I just let this shit like it is. Thanks guys! ;)

Jarhead

Share this post


Link to post
Share on other sites

I had an idea, maybe you want to hear:

http://forums.bistudio.com/showthread.php?t=115693

Main Idea is:

"... I'll try to build our small Team and will hire more Soundmodders to make the FAP to a kind of production corporation with several Soundmodders. With a big sound-source-library we are able to help each other to expand the interest in Soundmod steadily.

Well, FAP is not a project. FAP meant to be a meeting of soundmodders. To promote each other and to teach new Modders. All FAP Member will have the opportunity to choose from a larger sound source library. Thus, each soundmodder can present his own individual projects, ask for help or meet other soundmodders and start something together. This should be a kind of training program. So, first we should get together and talk about all this. PM me if you're interested..."

What do you think?

Jarhead

Share this post


Link to post
Share on other sites

Just made a small simple script to show the values of the ambient parameters on screen, plus an editable simple expression you can experiment with. Read here for more.

It should give the avid sound modder some useful data when trying to work out volumes and ease the process of writing complex simple expressions without the constant restarts.

Share this post


Link to post
Share on other sites

So, I going to ask the config pro around here! So Carl, listen please :D

I have several problems. I want to add the ARTY Incominsound in my config. Now I added this for example:

class ARTY_Flare_Medium: ARTY_Flare_Small

{

ARTY_IncomingSounds1[] = {"\JSRS_Sonic_Cracks\Fly\ArtyFly1.wss",db-20,1,2000};

ARTY_IncomingSounds2[] = {"\JSRS_Sonic_Cracks\Fly\ArtyFly2.wss",db-20,1,2000};

ARTY_IncomingSounds3[] = {"\JSRS_Sonic_Cracks\Fly\ArtyFly3.wss",db-20,1,2000};

ARTY_IncomingSounds4[] = {"\JSRS_Sonic_Cracks\Fly\ArtyFly4.wss",db-20,1,2000};

ARTY_IncomingSounds5[] = {"\JSRS_Sonic_Cracks\Fly\ArtyFly5.wss",db-20,1,2000};

ARTY_IncomingSounds6[] = {"\JSRS_Sonic_Cracks\Fly\ArtyFly6.wss",db-20,1,2000};

ARTY_IncomingSounds[] = {"ARTY_IncomingSounds1",16.6,"ARTY_IncomingSounds2",16.6,"ARTY_IncomingSounds3",16.6,"ARTY_IncomingSounds4",16.6,"ARTY_IncomingSounds5",16.6,"ARTY_IncomingSounds6",16.7};

};

Now the game says something like this in RPT: "Warning Message: Sound ARTY_IncomingSounds2 not found"

So I thought, ok, only one sound and did it like that in config:

class ARTY_Sh_122_LASNET: ARTY_Sh_122_NET

{

ARTY_IncomingSounds[] = {"\JSRS_Sonic_Cracks\Fly\ArtyFly4.wss",db-20,1,2000};

};

Now he says: "Warning Message: Sound \JSRS_Sonic_Cracks\Fly\ArtyFly4.wss not found"

Be aware, this is not a normal missing Wss entry! So it have something to do with the config, the sounds are there! The message "Warning Message: Sound \JSRS_Sonic_Cracks\Fly\ArtyFly.wss not found" is displayed INGAME!!!!!! It appears while ARTY is splashing. So anyone an idea? The Entry is from BIS for sure, I took it from the allinoneconfig of kju. There the entries are empty and looking like that:

class ARTY_Sh_Base: ShellBase

{

ARTY_IncomingSounds[] = {};

};

So please, anyone an idea? I trying now since two days... this shit is making me crazy!!!!!! AARHGHHHGHHGHGH Oh and theres another thing, I have these little entries:

class B_545x39_Ball: BulletBase

{

supersonicCrackNear[] = {"\JSRS_Sonic_Cracks\B_545x39_Ball",db-20,1,75};

supersonicCrackFar[] = {"\JSRS_Sonic_Cracks\B_545x39_Ball_far",db-20,1,500};

soundFly[] = {"\JSRS_Sonic_Cracks\Fly\bullet_by4",db-20,1,150};

bulletFly1[] = {"\JSRS_Sonic_Cracks\Bullet_545x39\bullet_by1",db-20,1,750};

bulletFly2[] = {"\JSRS_Sonic_Cracks\Bullet_545x39\bullet_by2",db-20,1,750};

bulletFly3[] = {"\JSRS_Sonic_Cracks\Bullet_545x39\bullet_by3",db-20,1,750};

bulletFly4[] = {"\JSRS_Sonic_Cracks\Bullet_545x39\bullet_by4",db-20,1,750};

bulletFly5[] = {"\JSRS_Sonic_Cracks\Bullet_545x39\bullet_by5",db-20,1,750};

bulletFly6[] = {"\JSRS_Sonic_Cracks\Bullet_545x39\bullet_by6",db-20,1,750};

bulletFly[] = {"bulletFly1",16.6,"bulletFly2",16.6,"bulletFly3",16.6,"bulletFly4",16.6,"bulletFly5",16.6,"bulletFly6",16.6};

};

But I'm not able to hear the bulletby ingame! No RPT error or so. And I tried with overallvolume entries like 1,1,750, i tried 5,1,750 and I tried 20,1,750... now I tried with db-20,1,750 since the soniccracks are working with that too... oh and the source sound is already as loud as the soniccracks, but I still only can hear the cracks... wtf

Jarhead

Share this post


Link to post
Share on other sites

Did you solve not being able to increase the track sound issue JH? I have the same thing with an aircraft's wind noise.

I'm trying to shape the sound cone so that you only hear the sound if the plane is roughly over head:

class ForsageOut {

sound[] = {"\cmSound_s_A10\A10_Forsage_out",5,1.0,7000};

volume = "engineOn*camPos*(speed factor[0.3, 1])";

frequency = "(0.1+(1.2*(speed factor[0.3, 1])))";

cone[] = {0,0,4,1.5};

};

I have really upped the vol of the .wav file and normalized it but still its either very quiet or silent.

Edited by Bigpickle

Share this post


Link to post
Share on other sites

I'm not a sound modder by any means, but I use Eliteness, Audacity and a wss/wav converter to poke around inside sound .pbos and create private tweaked versions.

Sound modders tend to leave out the launchers in this game an awful lot, and if they include them, they are often far too quiet compared to gunshots. Is there are simple way to increase the volume the engine plays a sound at? Some easily-recognizable figure in the config, perhaps?

Share this post


Link to post
Share on other sites

This below is the real basic formula for replacing a sound for a gun etc. Vehicles are a lot more complex as the sound will be manipulated by the speed of the said vehicle,its rpm or rotor speed,thrust etc.

sound[] = {"\Sample_sound_Directory\my_sample",5,1.0,7000};
the 5 = the games understanding of whether the "my_sample" file is a loud raw sound file, so the 5 figure is really more a scale of priority than volume

the 1.0 = the sound files pitch when played through the game, 1.0 or 1 would be regular normal pitch meaning than 1.5 would be higher pitch and 0.5 would be lower

the 7000 = the distance in meters the sound would be heard by humans/AI inside the game world

*note the distance is always smaller in game than in the config value so 7000 would actually be more round 5000-6000m that the sound would be heard by the human ear, this does not effect AI*

Share this post


Link to post
Share on other sites

Hey all,

Is it possible to have multiple sounds for engines, forsage etc like you can for weapons?

class ForsageOut

{

sounds[] = {"sound1",0.25,"sound2",0.25,"sound3",0.25,"sound4",0.25};

sound1[] = {"\my_sound\1",1,1,5};

sound2[] = {"\my_sound\2",1,1,5};

sound3[] = {"\my_sound\3",1,1,5};

sound4[] = {"\my_sound\4",1,1,5};

frequency = 1;

volume = 8;

cone[] = {5,5,5,5};

Share this post


Link to post
Share on other sites

Anyone know if there are much overhead associated with using interpolate and factor to improve expression readability, compared to using simpler expressions using basic arithmetics?

Ex:

2 * (rain factor[0,1] min rain factor[1,0])

could be written as:

2 * (rain min (1-rain))

The first one lets me "visualize" the output curve pretty much immediately (max at middle), whereas in the second one I actually have to twist my mind to see what is going on. This is obviously a very simple example, but you get the idea. Is it "worth" spending time "simplifying" the expressions to the point where they become hard to read?

Share this post


Link to post
Share on other sites
class ForsageOut {

sound[] = {"\cmSound_s_A10\A10_Forsage_out",5,1.0,7000};

volume = "engineOn*camPos*(speed factor[0.3, 1])";

It might be because your source volume is so low and your volume range is quite high, try this and see if it helps:

sound[] = {"\cmSound_s_A10\A10_Forsage_out",50,1,5000};

If things still appear quiet I don't know whats going on but you are welcome to download the HiFi A10 I did and have a poke about inside to compare volumes.

Is it possible to have multiple sounds for engines, forsage etc like you can for weapons?

I don't think you can add more sound entries for the vehicle's, I'm sure I tried this at some point as well as trying it on the sonic cracks and shellbase. Personally, I'd try and get in touch with Tango Romeo. He made the best vehicle sounds/configs I've heard/seen. Maybe he could help.

Sound modders tend to leave out the launchers in this game an awful lot, and if they include them, they are often far too quiet compared to gunshots. Is there are simple way to increase the volume the engine plays a sound at? Some easily-recognizable figure in the config, perhaps?

From a first person point of view the only way to increase the volume would be to increase the gain at soundwave level, nothing can be done to increase the volume in first person via the config. The only volume you control in the config is the volume in relation to other sounds within the game.

Anyone know if there are much overhead associated with using interpolate and factor to improve expression readability, compared to using simpler expressions using basic arithmetics?

Ex:

2 * (rain factor[0,1] min rain factor[1,0])

could be written as:

2 * (rain min (1-rain))

This is beyond me but maybe Andersson could help you, I strongly suggest you PM him, after all he did some clever environmental stuff with the configs for HiFi Novus Aevum.

Just a heads up for you guys new to modding.

I'm back working on a new mod myself, I'll be releasing it in stages and once each stage is done I'll be releasing the configs too. Of course these will be free to use by ALL.

Share this post


Link to post
Share on other sites
Is it possible to have multiple sounds for engines, forsage etc like you can for weapons?

Yes, you can have multiple sounds and use factor to "shape the overlap". However, as far as I've figured out, you can only have on cone[] control for any given vehicle. Edit: By that I mean you can add several classes that will play either using volume overlap or simultaneously, not several sounds within the same class.

If the original sound config uses cone[] for its ForsageOut class, you have to put it there yourself. Maybe you can put it elsewhere if you nullify the original class, I haven't tested this. Btw, are you sure about those cone values? Looks weird to me.

Rgr that on the config stuff.

Share this post


Link to post
Share on other sites

So what do the different variables mean?

class ForsageOut {
sound[] = {"\cmSound_s_A10\A10_Forsage_out",[color="#FF0000"]5[/color],[color="#00FF00"]1.0[/color],[color="#0000FF"]7000[/color]};
volume = "engineOn*camPos*(speed factor[[color="#40E0D0"]0.3[/color], [color="#FF8C00"]1[/color]])"; 

I've gathered that red and blue are volume and range, but what is green, cyan, and orange? And how do cone values work?

I'd check out the tutorial, but all the links I've seen are dead. :butbut:

Share this post


Link to post
Share on other sites

Guessing green is just frequency (bad memory atm :p), and I think you can do frequency = "some expression" as well, just as the volume.

"Some expression" can be any kind of simple expression, which also explains what's in the factor value. Basically factor only describes a ramp that goes from 0 through 1 based on the "x inputs" you give it. For ambient sounds I think everything is limited to 0-1 range (i.e. night can't be more than 1), whereas for certain vehicle sounds they may go above those usual limits. Interpolate is the same as factor, except you can also control the output levels for minimum and maximum inputs, it's still a single ramp. If you want to do overlaps using a ramp up AND down curve, you have to combine two ramps using min, then multiply the result by 2.

Example: Here is a config I use to have four overlapping rain sounds (natural range of 0-1). 1: Drizzle [0-0.25-0.5], 2: Light [0.25-0.5-0.75], 3: Medium [0.5-0.75-1], Heavy [0.75-1]. Goes like this:

class Rain {}; //Remove default rain sound
class RainBase01 {
   sound[] = {
       "\BiB_Ambience\AmbientSounds\Rain_Base01",
       0.227828,
       1
   };
   volume = "2 * ((rain factor[0,0.5]) min (rain factor[0.5,0]))";
};
class RainBase02 {
   sound[] = {
       "\BiB_Ambience\AmbientSounds\Rain_Base02",
       0.227828,
       1
   };
   volume = "2 * ((rain factor[0.25,0.75]) min (rain factor[0.75,0.25]))";
};
class RainBase03 {
   sound[] = {
       "\BiB_Ambience\AmbientSounds\Rain_Base03",
       0.227828,
       1
   };
   volume = "2 * ((rain factor[0.5,1]) min (rain factor[1,0.5]))";
};
class RainBase04 {
   sound[] = {
       "\BiB_Ambience\AmbientSounds\Rain_Base04",
       0.227828,
       1
   };
   volume = "(rain factor[0.75,1])";
};

Since we can put more stuff into the expressions, it's more flexible than say sound modding for Flight Simulator. But it's hard as hell visualizing the "curves" here, or at least do complex curves with ease.

Don't quote me on this, but I think (for ambient sounds at least) that any volume = "expression" will override any volume put in as a number in the sound[] definition. I'd expect same behavior also for frequency.

If you want to test your expressions, you may want to look at this post. Using Gaia's debug tool, you can enter expressions on the fly while gaming and see the results, pretty neat.

As for cone values, sorry, I forgot. I investigated it while doing configs for the AN-2, where I wanted to use the "ForsageOut" class (since it already had the cone, the only cone that would work) to produce propeller noise but much more so right behind the propeller, not so much in front of it.

What I came up with looks like this:

//Forsage (cone) used for additional prop noise only when outside. Removing cone from here and putting it elsewhere doesn't appear to work.
           class ForsageOut
           {
               sound[]=
               {
                   "BiB_AN2\Ext_Prop_Forsage",
                   0.500000,
                   1,
                   100
               };
               frequency="0.8 + (0.2*(rpm factor[0.00,1.00]))";
               volume="1.5*camPos*(rpm factor[0.50,1.00])*(thrust factor[0.50,1.00])";
               cone[]={1.140000,3.920000,1.000000,0.250000};
           };

If you play around with the cone values, I'm sure you'll figure out what they do. It has to do with minimum and maximum angles for the sound level.

Edited by CarlGustaffa

Share this post


Link to post
Share on other sites

Woa, that's a lot to take in.

Thanks for writing all that out. :)

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

×