Loudness

From Unify Community Wiki
(Difference between revisions)
Jump to: navigation, search
m
m
Line 23: Line 23:
  
 
*A UnityScript alternative would have to be more verbose, due to lack of properties and extension methods in that language (at present), but feel free to add a JS solution to this page.  ;-)
 
*A UnityScript alternative would have to be more verbose, due to lack of properties and extension methods in that language (at present), but feel free to add a JS solution to this page.  ;-)
 +
 +
==Loudness.cs==
 +
<csharp>}</csharp>

Revision as of 20:35, 11 May 2011

Author: Jessy

Description

Unity's AudioSource.volume and AudioListener.volume use what is known as a linear taper. Although that is ideal for performance, it means that the 0-1 values that those properties utilize do not match up well with human perception, with loud values taking up a disproportionate amount of the range. This script is designed to make working with loudness more intuitive.

Loudness is a complex phenomenon, and this simple script does not, for instance, take equal-loudness contours into account, but it should yield better results than a linear taper in every real-world case. I've found the result described here, that "a 10 dB increase in sound level corresponds approximately to a perceived doubling of loudness", leads the way to a highly usable loudness control.

Instructions (C# only*)

Add this script to your project, wherever you like. It's a static class, so you neither need nor have the ability to attach it to a Game Object.


Loudness.Listener (which alters AudioListener.volume) is a property, so you can assign a 0-1 value to it, or get one back, using the equals sign. <csharp>Loudness.Listener = .5F; // Half as loud as it can get</csharp>


Extension properties do not exist in C# yet, so for instances of Audio Sources, you have to use separate get and set methods. <csharp>audio.SetLoudness(.5F); // Affects the AudioSource attached to this Game Object someAudioSource.GetLoudness(); // gives you a better idea of the portion of maximum loudness than someAudioSource.volume</csharp>


  • A UnityScript alternative would have to be more verbose, due to lack of properties and extension methods in that language (at present), but feel free to add a JS solution to this page.  ;-)

Loudness.cs

<csharp>}</csharp>

Personal tools
Namespaces

Variants
Actions
Navigation
Extras
Toolbox