internal Attributes3D(FMOD.ATTRIBUTES_3D attributes)
 {
     Position      = attributes.position.ToVector3();
     Velocity      = attributes.velocity.ToVector3();
     ForwardVector = attributes.forward.ToVector3();
     UpVector      = attributes.up.ToVector3();
 }
Beispiel #2
0
        public static FMOD.ATTRIBUTES_3D To3DAttributes(this Transform transform)
        {
            FMOD.ATTRIBUTES_3D attributes = new FMOD.ATTRIBUTES_3D();
            attributes.forward  = transform.forward.ToFMODVector();
            attributes.up       = transform.up.ToFMODVector();
            attributes.position = transform.position.ToFMODVector();

            return(attributes);
        }
Beispiel #3
0
        public static FMOD.ATTRIBUTES_3D To3DAttributes(this Vector3 pos)
        {
            FMOD.ATTRIBUTES_3D attributes = new FMOD.ATTRIBUTES_3D();
            attributes.forward  = ToFMODVector(Vector3.forward);
            attributes.up       = ToFMODVector(Vector3.up);
            attributes.position = ToFMODVector(pos);

            return(attributes);
        }
Beispiel #4
0
        public static FMOD.ATTRIBUTES_3D To3DAttributes(GameObject go, Rigidbody rigidbody = null)
        {
            FMOD.ATTRIBUTES_3D attributes = go.transform.To3DAttributes();

            if (rigidbody)
            {
                attributes.velocity = rigidbody.velocity.ToFMODVector();
            }

            return(attributes);
        }
Beispiel #5
0
 public static void PreviewUpdatePosition(float distance, float orientation)
 {
     if (previewEventInstance != null)
     {
         // Listener at origin
         FMOD.ATTRIBUTES_3D pos = new FMOD.ATTRIBUTES_3D();
         pos.position.x = (float)Math.Sin(orientation) * distance;
         pos.position.y = (float)Math.Cos(orientation) * distance;
         pos.forward.x  = 1.0f;
         pos.up.z       = 1.0f;
         CheckResult(previewEventInstance.set3DAttributes(pos));
     }
 }
            static public ATTRIBUTES_3D to3DAttributes(GameObject go, Rigidbody rigidbody = null)
            {
                FMOD.ATTRIBUTES_3D attributes = new FMOD.ATTRIBUTES_3D();
                attributes.forward  = toFMODVector(go.transform.forward);
                attributes.up       = toFMODVector(go.transform.up);
                attributes.position = toFMODVector(go.transform.position);

                if (rigidbody)
                {
                    attributes.velocity = toFMODVector(rigidbody.velocity);
                }

                return(attributes);
            }
Beispiel #7
0
        public static FMOD.ATTRIBUTES_3D To3DAttributes(GameObject go, Rigidbody2D rigidbody)
        {
            FMOD.ATTRIBUTES_3D attributes = go.transform.To3DAttributes();

            if (rigidbody)
            {
                FMOD.VECTOR vel;
                vel.x = rigidbody.velocity.x;
                vel.y = rigidbody.velocity.y;
                vel.z = 0;
                attributes.velocity = vel;
            }

            return(attributes);
        }
Beispiel #8
0
        public void Update(FMOD.ATTRIBUTES_3D attributes)
        {
            // Cull finished instances
            FMOD.Studio.PLAYBACK_STATE state;
            var finishedInstances = instances.FindAll((x) => { x.getPlaybackState(out state); return(state == FMOD.Studio.PLAYBACK_STATE.STOPPED); });

            foreach (var instance in finishedInstances)
            {
                instance.release();
            }
            instances.RemoveAll((x) => !x.isValid());

            // Update 3D attributes
            foreach (var instance in instances)
            {
                instance.set3DAttributes(attributes);
            }
        }
Beispiel #9
0
        public static FMOD.ATTRIBUTES_3D To3DAttributes(this Transform transform)
        {
            FMOD.ATTRIBUTES_3D attributes = new FMOD.ATTRIBUTES_3D();
            attributes.forward = transform.forward.ToFMODVector();
            attributes.up = transform.up.ToFMODVector();
            attributes.position = transform.position.ToFMODVector();

            return attributes;
        }
Beispiel #10
0
        public static FMOD.ATTRIBUTES_3D To3DAttributes(this Vector3 pos)
        {
            FMOD.ATTRIBUTES_3D attributes = new FMOD.ATTRIBUTES_3D();
            attributes.forward = ToFMODVector(Vector3.forward);
            attributes.up = ToFMODVector(Vector3.up);
            attributes.position = ToFMODVector(pos);

            return attributes;
        }
 public static void PreviewUpdatePosition(float distance, float orientation)
 {
     if (previewEventInstance != null)
     {
         // Listener at origin
         FMOD.ATTRIBUTES_3D pos = new FMOD.ATTRIBUTES_3D();
         pos.position.x = (float)Math.Sin(orientation) * distance;
         pos.position.y = (float)Math.Cos(orientation) * distance;
         pos.forward.x = 1.0f;
         pos.up.z = 1.0f;
         CheckResult(previewEventInstance.set3DAttributes(pos));
     }
 }
        void Update()
        {
            if (studioSystem != null)
            {
                studioSystem.update();

                bool foundListener   = false;
                bool hasAllListeners = false;
                int  numListeners    = 0;
                for (int i = FMOD.CONSTANTS.MAX_LISTENERS - 1; i >= 0; i--)
                {
                    if (!foundListener && HasListener[i])
                    {
                        numListeners    = i + 1;
                        foundListener   = true;
                        hasAllListeners = true;
                    }

                    if (!HasListener[i] && foundListener)
                    {
                        hasAllListeners = false;
                    }
                }

                if (foundListener)
                {
                    studioSystem.setNumListeners(numListeners);
                }

                if (!hasAllListeners && !listenerWarningIssued)
                {
                    listenerWarningIssued = true;
                    UnityEngine.Debug.LogWarning("FMOD Studio Integration: Please add an 'FMOD Studio Listener' component to your a camera in the scene for correct 3D positioning of sounds");
                }

                for (int i = 0; i < attachedInstances.Count; i++)
                {
                    FMOD.Studio.PLAYBACK_STATE playbackState = FMOD.Studio.PLAYBACK_STATE.STOPPED;
                    attachedInstances[i].instance.getPlaybackState(out playbackState);
                    if (!attachedInstances[i].instance.isValid() ||
                        playbackState == FMOD.Studio.PLAYBACK_STATE.STOPPED ||
                        attachedInstances[i].transform == null // destroyed game object
                        )
                    {
                        attachedInstances.RemoveAt(i);
                        i--;
                        continue;
                    }

                    if (attachedInstances[i].rigidBody)
                    {
                        attachedInstances[i].instance.set3DAttributes(RuntimeUtils.To3DAttributes(attachedInstances[i].transform, attachedInstances[i].rigidBody));
                    }
                    else
                    {
                        attachedInstances[i].instance.set3DAttributes(RuntimeUtils.To3DAttributes(attachedInstances[i].transform, attachedInstances[i].rigidBody2D));
                    }
                }


                #if UNITY_EDITOR
                MuteAllEvents(UnityEditor.EditorUtility.audioMasterMute);
                #endif


                #if UNITY_EDITOR
                // Catch any 3D events that are being played at the origin
                foreach (FMOD.Studio.EventDescription desc in cachedDescriptions.Values)
                {
                    if (!desc.isValid())
                    {
                        continue;
                    }
                    bool is3d;
                    desc.is3D(out is3d);
                    if (!is3d)
                    {
                        continue;
                    }

                    string path;
                    desc.getPath(out path);

                    int instanceCount;
                    desc.getInstanceCount(out instanceCount);
                    FMOD.Studio.EventInstance[] instances = new FMOD.Studio.EventInstance[instanceCount];
                    desc.getInstanceList(out instances);
                    for (int i = 0; i < instances.Length; i++)
                    {
                        if (warnedInvalidInstances.ContainsKey(instances[i].getRaw()))
                        {
                            continue;
                        }

                        FMOD.ATTRIBUTES_3D attributes = new FMOD.ATTRIBUTES_3D();
                        instances[i].get3DAttributes(out attributes);
                        if (attributes.position.x == 0 &&
                            attributes.position.y == 0 &&
                            attributes.position.z == 0)
                        {
                            warnedInvalidInstances.Add(instances[i].getRaw(), true);
#if UNITY_5_X
                            Debug.LogWarningFormat("FMOD Studio: Instance of Event {0} found playing at the origin. EventInstance.set3DAttributes() should be called on all 3D events", path);
#else
                            Debug.LogWarning(string.Format("FMOD Studio: Instance of Event {0} found playing at the origin. EventInstance.set3DAttributes() should be called on all 3D events", path));
#endif
                        }
                    }
                }
                #endif
            }
        }
Beispiel #13
0
 public static FMOD.ATTRIBUTES_3D Make3DPosition(this Transform transform)
 {
     FMOD.ATTRIBUTES_3D attributes = new FMOD.ATTRIBUTES_3D();
     attributes.position = transform.position.ToFMODVector();
     return(attributes);
 }