Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  2. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

Audio Cheap point stereo script

Discussion in 'Audio & Video' started by mcmount, Nov 18, 2017.

  1. mcmount

    mcmount

    Joined:
    Nov 15, 2015
    Posts:
    83
    Hi,

    We had a need for a fast and dirty point stereo, like Unity 3D sound does with mono audio.
    If you need this kind of script, here you go;

    Code (JavaScript):
    1. #pragma strict
    2.  
    3. //  Cheap point stereo script
    4.  
    5. //  This script creates 2 dummy object attached to the player (Set in inspector, Camera or player).
    6. //  Those objects are defining which ear is closer to the soundsource and panning according to it.
    7. //  by setting the maxdistance you'll get the fadeout, sensitivy gives you the pan power.
    8. //  Please improve, this script is not complete, but serves for the purpose. Done in 10 mins.
    9. //  Understand that stereo channels do not rotate, this script just pans and deal with volume.
    10. // Add reverb zones further out and the result is good.
    11. //  Courtesy of C3ES.
    12.  
    13.  
    14.  
    15. var Loudspeaker : GameObject;
    16. var player: GameObject;
    17. var maxdistance:float=50f;
    18. var sensitivity:float=5f;
    19. private var earLeft: GameObject;
    20. private var earRight: GameObject;
    21.  
    22.  
    23.  
    24. function Start () {
    25.  
    26.     //  define the new dummy objects, reparent them
    27.     earLeft = new GameObject();
    28.     earLeft.transform.parent = player.transform;
    29.     earLeft.transform.name="earLeft";
    30.     earLeft.transform.position=player.transform.position;
    31.     earLeft.transform.localPosition.x=player.transform.localPosition.x-.1;
    32.  
    33.     earRight = new GameObject();
    34.     earRight.transform.parent = player.transform;
    35.     earRight.transform.name="earRight";
    36.     earRight.transform.position=player.transform.position;
    37.     earRight.transform.localPosition.x=player.transform.localPosition.x+.1;
    38.  
    39.  
    40.  
    41. }
    42.  
    43. function Update () {
    44.  
    45.         //  calculate distances
    46.         var dist = Vector3.Distance(Loudspeaker.transform.position, player.transform.position);
    47.         var ldist = Vector3.Distance(Loudspeaker.transform.position, earLeft.transform.position);
    48.         var rdist = Vector3.Distance(Loudspeaker.transform.position, earRight.transform.position);
    49.  
    50.         //  calculate the values
    51.         var vol= 1-(dist/maxdistance);
    52.         var pan = (ldist - rdist)*sensitivity;
    53.  
    54.         //  dirty fixes
    55.         if (pan<-1) pan=-1;
    56.         if (pan>1) pan=1;
    57.         if (sensitivity<0) sensitivity=0;
    58.         if (maxdistance<.1) maxdistance=.1;
    59.  
    60.         //  set the result
    61.         var audiosource = Loudspeaker.GetComponent(AudioSource);
    62.         audiosource.volume=vol;
    63.         audiosource.panStereo=pan*(1-vol);
    64.  
    65. }
    66.  
     
    Last edited: Nov 20, 2017