Пример #1
0
    public float Raise(Vector3 position, Quaternion rotation, Vector3 scale, Transform parent = null)
    {
        float fxTime = 0;

        if (sfx != null)
        {
            AudioInstance.PlayClipAtPoint(sfx, position, outputMixer, pitchRange);
            fxTime = sfx.length;
        }

        foreach (GameObject visualFX in visualFX)
        {
            GameObject instance = FXPool.getFXObject(visualFX, poolSize);
            instance.transform.position = position;
            instance.transform.rotation = rotation;
            instance.transform.SetParent(parent);
            instance.transform.localScale = scale;
            instance.SetActive(true);
            VisualFX vFX = instance.GetComponent <VisualFX>();
            if (vFX != null)
            {
                if (fxTime < vFX.displayTime)
                {
                    fxTime = vFX.displayTime;
                }
                vFX.Play();
            }
        }
        return(fxTime);
    }
Пример #2
0
        public AudioInstance GetAudioInstance(SoundBank forSoundBank)
        {
            AudioInstance audioInstance = null;

            _instanceMap.TryGetValue(forSoundBank, out audioInstance);
            return(audioInstance);
        }
Пример #3
0
        private void Update()
        {
            AudioInstance audioInstance = null;
            bool          flag          = true;

            while (flag)
            {
                object obj = deferredSetDataQueue;
                lock (obj)
                {
                    flag = (deferredSetDataQueue.Count > 0);
                    if (!flag)
                    {
                        break;
                    }
                    audioInstance = deferredSetDataQueue.Dequeue();
                }
                audioInstance.audioClip.SetData(audioInstance.dataToSet, 0);
                SetAudioClipLoadState(audioInstance, AudioDataLoadState.Loaded);
                audioInstance.audioClip = null;
                audioInstance.dataToSet = null;
            }
            object obj2 = deferredSetFail;

            lock (obj2)
            {
                while (deferredSetFail.Count > 0)
                {
                    audioInstance = deferredSetFail.Dequeue();
                    SetAudioClipLoadState(audioInstance, AudioDataLoadState.Failed);
                }
            }
        }
Пример #4
0
    /// <summary>
    /// Plays a sound located at a given file adress. Will be unloaded automatically when the _duration ends.
    /// </summary>
    /// <param name="_path">The file adress within Provided Assets where the file can be found.</param>
    /// <param name="_duration">The duration of the sound.</param>
    public void PlaySound(string _path, float _duration)
    {
        AudioInstance sound = new AudioInstance();

        sound.duration = _duration;
        sound.LoadAndPlayAudio(_path);
        currentAudio.Add(sound);
    }
Пример #5
0
 // INTERNAL CALLED BY  STATIC
 public void SetGeneralVolumeFrk(float NewValue)
 {
     _GeneralVolume = NewValue;
     for (int i = 0; i < GetAudioCount(); i++)
     {
         AudioInstance Inst = GetAudio(i);
         Inst.CalculateVolume();
     }
 }
Пример #6
0
        public static AudioClip Load(Stream dataStream, AudioFormat audioFormat, string unityAudioClipName, bool doStream = false, bool loadInBackground = true, bool diposeDataStreamIfNotNeeded = true)
        {
            AudioClip             audioClip = null;
            CustomAudioFileReader reader    = null;

            try
            {
                reader = new CustomAudioFileReader(dataStream, audioFormat);
                AudioInstance audioInstance = new AudioInstance
                {
                    reader       = reader,
                    samplesCount = (int)(reader.Length / (reader.WaveFormat.BitsPerSample / 8))
                };
                if (!doStream)
                {
                    audioClip = (audioInstance.audioClip = AudioClip.Create(unityAudioClipName, audioInstance.samplesCount / audioInstance.channels, audioInstance.channels, audioInstance.sampleRate, doStream));
                    if (diposeDataStreamIfNotNeeded)
                    {
                        audioInstance.streamToDisposeOnceDone = dataStream;
                    }
                    SetAudioClipLoadType(audioInstance, AudioClipLoadType.DecompressOnLoad);
                    SetAudioClipLoadState(audioInstance, AudioDataLoadState.Loading);
                    if (!loadInBackground)
                    {
                        audioInstance.dataToSet = new float[audioInstance.samplesCount];
                        audioInstance.reader.Read(audioInstance.dataToSet, 0, audioInstance.dataToSet.Length);
                        audioInstance.audioClip.SetData(audioInstance.dataToSet, 0);
                        SetAudioClipLoadState(audioInstance, AudioDataLoadState.Loaded);
                        return(audioClip);
                    }
                    lock (deferredLoadQueue)
                    {
                        deferredLoadQueue.Enqueue(audioInstance);
                    }
                    RunDeferredLoaderThread();
                    EnsureInstanceExists();
                    return(audioClip);
                }
                audioClip = (audioInstance.audioClip = AudioClip.Create(unityAudioClipName, audioInstance.samplesCount / audioInstance.channels, audioInstance.channels, audioInstance.sampleRate, doStream, delegate(float[] target)
                {
                    reader.Read(target, 0, target.Length);
                }, delegate(int target)
                {
                    reader.Seek(target, SeekOrigin.Begin);
                }));
                SetAudioClipLoadType(audioInstance, AudioClipLoadType.Streaming);
                SetAudioClipLoadState(audioInstance, AudioDataLoadState.Loaded);
                return(audioClip);
            }
            catch (Exception ex)
            {
                SetAudioClipLoadState(audioClip, AudioDataLoadState.Failed);
                Debug.LogError("Could not load AudioClip named '" + unityAudioClipName + "', exception:" + ex);
                return(audioClip);
            }
        }
Пример #7
0
    void CreateRepetitionRegistry(int id, AudioSource source, float startTime)
    {
        _lastSources.Add(_lastSources.Count > 0 ? _lastSources[_lastSources.Count - 1] : null);
        for (int i = _lastSources.Count - 2; i >= id; i--)
        {
            _lastSources[i + 1] = _lastSources[i];
        }
        _lastSources[id] = new AudioInstance(source, startTime);

        CheckNextStillValid(id);
    }
Пример #8
0
    // Fade out a sound over a time period, if the source gets destroyed it will be cancelled
    public Coroutine FadeOutSound(GameObject source, SoundBank soundBank, float duration)
    {
        AudioInstance audioInstance = GetOrAddAudioInstance(source, soundBank);

        if (!audioInstance.AudioSource.isPlaying)
        {
            audioInstance.AudioSource.Play();
        }

        return(StartCoroutine(FadeAudioRoutine(audioInstance, audioInstance.AudioSource.volume, 0, duration)));
    }
Пример #9
0
 // INTERNAL CALLED BY  STATIC
 public void SetVoiceVolumeFrk(float NewValue)
 {
     _VoiceVolume = NewValue;
     for (int i = 0; i < GetAudioCount(); i++)
     {
         AudioInstance Inst = GetAudio(i);
         if (Inst._Type == AudioSourceType.Voice)
         {
             Inst.CalculateVolume();
         }
     }
 }
Пример #10
0
    // Stop a currently playing sound on a specific source
    public void StopSound(GameObject source, SoundBank soundBank)
    {
        AudioInstance audioInstance = GetAudioInstance(source, soundBank);

        if (audioInstance != null)
        {
            audioInstance.AudioSource.Stop();
        }
        else
        {
            Debug.LogWarning(string.Format("Couldn't find audio instance for {0}:{1}", source.name, soundBank.name));
        }
    }
Пример #11
0
    public void PlaySound(AudioEffect audioEffect, float volume, bool makeInstace = false)
    {
        AudioInstance selectedAudio = soundEffectInstances.Find(x => x.audioEffect == audioEffect);

        if (makeInstace)
        {
            selectedAudio = new AudioInstance();
            GameObject newObj = Instantiate(selectedAudio.audioS.gameObject);
            selectedAudio.audioS = newObj.GetComponent <AudioSource>();
        }
        selectedAudio.audioS.spatialBlend = 0;
        selectedAudio.audioS.volume       = volume;
        selectedAudio.audioS.Play();
    }
Пример #12
0
    public void PlaySong(AudioClip audio)
    {
        if (audioInstance != null)
        {
            audioInstance.setAudio(audio);
        }
        else
        {
            audioInstance = new AudioInstance(0, 100, audio);
        }

        source.clip = audioInstance.getAudio();
        source.Play();
    }
Пример #13
0
        private static void DeferredLoaderMain()
        {
            AudioInstance audioInstance = null;
            bool          flag          = true;
            long          num           = 100000L;

            while (flag || num > 0L)
            {
                num -= 1L;
                object obj = deferredLoadQueue;
                lock (obj)
                {
                    flag = (deferredLoadQueue.Count > 0);
                    if (!flag)
                    {
                        continue;
                    }
                    audioInstance = deferredLoadQueue.Dequeue();
                }
                num = 100000L;
                try
                {
                    audioInstance.dataToSet = new float[audioInstance.samplesCount];
                    audioInstance.reader.Read(audioInstance.dataToSet, 0, audioInstance.dataToSet.Length);
                    audioInstance.reader.Close();
                    audioInstance.reader.Dispose();
                    if (audioInstance.streamToDisposeOnceDone != null)
                    {
                        audioInstance.streamToDisposeOnceDone.Close();
                        audioInstance.streamToDisposeOnceDone.Dispose();
                        audioInstance.streamToDisposeOnceDone = null;
                    }
                    object obj2 = deferredSetDataQueue;
                    lock (obj2)
                    {
                        deferredSetDataQueue.Enqueue(audioInstance);
                    }
                }
                catch (Exception exception)
                {
                    System.Console.WriteLine(exception);
                    object obj3 = deferredSetFail;
                    lock (obj3)
                    {
                        deferredSetFail.Enqueue(audioInstance);
                    }
                }
            }
        }
Пример #14
0
        private static void DeferredLoaderMain()
        {
            AudioInstance audioInstance = null;
            bool          flag          = true;
            long          num           = 100000L;

            while (flag || num > 0)
            {
                num--;
                lock (deferredLoadQueue)
                {
                    flag = (deferredLoadQueue.Count > 0);
                    if (flag)
                    {
                        audioInstance = deferredLoadQueue.Dequeue();
                        goto IL_0054;
                    }
                }
                continue;
IL_0054:
                num = 100000L;
                try
                {
                    audioInstance.dataToSet = new float[audioInstance.samplesCount];
                    audioInstance.reader.Read(audioInstance.dataToSet, 0, audioInstance.dataToSet.Length);
                    audioInstance.reader.Close();
                    audioInstance.reader.Dispose();
                    if (audioInstance.streamToDisposeOnceDone != null)
                    {
                        audioInstance.streamToDisposeOnceDone.Close();
                        audioInstance.streamToDisposeOnceDone.Dispose();
                        audioInstance.streamToDisposeOnceDone = null;
                    }
                    lock (deferredSetDataQueue)
                    {
                        deferredSetDataQueue.Enqueue(audioInstance);
                    }
                }
                catch (Exception exception)
                {
                    Debug.LogException(exception);
                    lock (deferredSetFail)
                    {
                        deferredSetFail.Enqueue(audioInstance);
                    }
                }
            }
        }
Пример #15
0
    public void Play3DSound(AudioEffect audioEffect, float volume, Vector3 position, bool makeInstace = false, float pitch = 1)
    {
        AudioInstance selectedAudio = soundEffectInstances.Find(x => x.audioEffect == audioEffect);

        if (makeInstace)
        {
            selectedAudio = new AudioInstance();
            GameObject newObj = Instantiate(selectedAudio.audioS.gameObject);
            selectedAudio.audioS = newObj.GetComponent <AudioSource>();
        }
        selectedAudio.audioS.pitch        = pitch;
        selectedAudio.audioS.spatialBlend = 1;
        selectedAudio.audioS.gameObject.transform.position = position;
        selectedAudio.audioS.volume = volume * Settings.SFX;
        selectedAudio.audioS.Play();
    }
Пример #16
0
        /// <summary>
        /// Applies panning and volume reduction to an AudioInstance based on the audio's position relative to the camera.
        /// </summary>
        /// <param name="audioInstance">AudioInstance to apply panning.</param>
        public static void ApplySoundPanning(AudioInstance audioInstance)
        {
            Vector2 distance = audioInstance.Position; //- Screen.UnscaledViewCenter;
            float   fade;

            if (distance.Length() < audioInstance.MinDistance)
            {
                fade = 1f;
            }
            else
            {
                fade = MathHelper.Clamp(1f - distance.Length() / audioInstance.MaxDistance, 0, 1);
            }
            audioInstance.Sound.Volume = fade * fade * audioInstance.BaseVolume;
            audioInstance.Sound.Pan    = MathHelper.Clamp(distance.X / audioInstance.MaxDistance, -1, 1);
        }
Пример #17
0
    // Play a sound from a specific source, use for spatial sounds or if you want to do things with the
    // AudioInstance like modify the volume over time by accessing the unity AudioSource
    // There is always a unique audio source per simulatenous sound
    public AudioInstance PlaySound(GameObject source, SoundBank soundBank, float volumeScale = 1.0f)
    {
        AudioInstance audioInstance = GetOrAddAudioInstance(source, soundBank);

        if (audioInstance != null)
        {
            audioInstance.AudioSource.volume = audioInstance.SoundBank.VolumeScale * volumeScale;
            audioInstance.AudioSource.clip   = audioInstance.GetNextRandomClip();
            audioInstance.AudioSource.Play();
        }
        else
        {
            Debug.LogWarning(string.Format("Couldn't find audio instance for {0}:{1}", source.name, soundBank.name));
        }

        return(audioInstance);
    }
Пример #18
0
    private AudioInstance GetAudioInstance(GameObject forSource, SoundBank forSoundBank)
    {
        AudioGroup    audioGroup    = GetAudioGroup(forSource);
        AudioInstance audioInstance = audioGroup.GetAudioInstance(forSoundBank);

        if (audioInstance.AudioSource == null)
        {
            audioGroup.RemoveAudioInstance(audioInstance);
            if (audioGroup.InstanceCount == 0)
            {
                _audioGroups.Remove(forSource);
            }
            return(null);
        }

        return(audioInstance);
    }
Пример #19
0
    void SelectGameObject(GameObject target)
    {
        if (selectedGameObject != null)
        {
            Animator[]      animators       = selectedGameObject.GetComponentsInChildren <Animator>();
            ButtonAnimation buttonAnimation = selectedGameObject.GetComponent <ButtonAnimation>();
            for (int i = 0; i < animators.Length; i++)
            {
                animators[i].SetTrigger("exit");
            }
            if (buttonAnimation != null)
            {
                buttonAnimation.ChangeState(ButtonAnimation.state.Idle);
            }
        }

        if (highlightClip != null)
        {
            AudioInstance.PlayClipAtPoint(highlightClip, Vector3.zero);
        }

        selectedGameObject = target;
        if (target != null)
        {
            rt.SetParent(target.transform);
            rt.anchoredPosition = Vector2.zero;

            AnimatedButton animatedButton = selectedGameObject.GetComponent <AnimatedButton>();
            if (animatedButton != null)
            {
                animatedButton.Select();
            }
            else if (target.GetComponent <IPointerClickHandler>() != null)
            {
                Animator[] animators = target.GetComponentsInChildren <Animator>();
                for (int i = 0; i < animators.Length; i++)
                {
                    animators[i].SetTrigger("enter");
                }
            }
        }
        else
        {
            transform.position = new Vector2(-5000, -5000);
        }
    }
Пример #20
0
    AudioClip getAudioByPriority(AudioInstance oldInstance, AudioInstance newInstance)
    {
        AudioClip result;

        int firtPriority   = oldInstance.getPriority();
        int secondPriority = newInstance.getPriority();

        if (firtPriority > secondPriority)
        {
            result = oldInstance.getAudio();
        }
        else
        {
            result = newInstance.getAudio();
        }

        return(result);
    }
Пример #21
0
    // I didn't make much about the audio souces configurable, this is where you'd change the defaults
    private AudioInstance GetOrAddAudioInstance(GameObject forSource, SoundBank soundBank)
    {
        AudioGroup    audioGroup    = GetOrAddAudioGroup(forSource);
        AudioInstance audioInstance = audioGroup.GetAudioInstance(soundBank);

        if (audioInstance == null)
        {
            audioInstance           = new AudioInstance();
            audioInstance.SoundBank = soundBank;

            audioInstance.AudioSource = forSource.AddComponent <AudioSource>();
            ConfigureSourceForSound(audioInstance.AudioSource, soundBank);

            audioGroup.AddAudioInstance(audioInstance);
        }

        return(audioInstance);
    }
Пример #22
0
    public override void InitializeManagerClass()
    {
        base.InitializeManagerClass();
        _AudioInstancePrefab = ResourceManager.Instance.LoadResource <GameObject>(
            "AudioInstance",
            "Prefabs/AudioInstance/AudioInstance").GetComponent <AudioInstance>();

        for (int i = 0; i < _BeginAudioInstanceCount; ++i)
        {
            var audioInstance = _AudioInstancePool.RegisterRecyclableObject(
                Instantiate(_AudioInstancePrefab));

            // 사용 가능한 상태로 설정합니다.
            audioInstance.canRecyclable = true;

            // Scene 이 변경되어도 생성된 AudioInstance 객체는 제거되지 않도록
            // AudioManager 하위 오브젝트로 추가합니다.
            audioInstance.transform.SetParent(transform);
        }
    }
Пример #23
0
        private void Update()
        {
            AudioInstance audioInstance = null;
            bool          flag          = true;

            for (; flag; audioInstance.audioClip.SetData(audioInstance.dataToSet, 0), Manager.SetAudioClipLoadState(audioInstance, AudioDataLoadState.Loaded), audioInstance.audioClip = null, audioInstance.dataToSet = null)
            {
                object obj = Manager.deferredSetDataQueue;
                Monitor.Enter(obj);
                try
                {
                    flag = (Manager.deferredSetDataQueue.Count > 0);
                    if (flag)
                    {
                        audioInstance = Manager.deferredSetDataQueue.Dequeue();
                        continue;
                    }
                }
                finally
                {
                    Monitor.Exit(obj);
                }
                break;
            }
            object obj2 = Manager.deferredSetFail;

            Monitor.Enter(obj2);
            try
            {
                while (Manager.deferredSetFail.Count > 0)
                {
                    audioInstance = Manager.deferredSetFail.Dequeue();
                    Manager.SetAudioClipLoadState(audioInstance, AudioDataLoadState.Failed);
                }
            }
            finally
            {
                Monitor.Exit(obj2);
            }
        }
Пример #24
0
    // I didn't make much about the audio souces configurable, this is where you'd change the defaults
    private AudioInstance GetOrAddAudioInstance(GameObject forSource, SoundBank soundBank)
    {
        AudioGroup    audioGroup    = GetOrAddAudioGroup(forSource);
        AudioInstance audioInstance = audioGroup.GetAudioInstance(soundBank);

        if (audioInstance == null)
        {
            audioInstance                                   = new AudioInstance();
            audioInstance.AudioSource                       = forSource.AddComponent <AudioSource>();
            audioInstance.AudioSource.spatialize            = soundBank.IsSpatial;
            audioInstance.AudioSource.spatialBlend          = soundBank.IsSpatial ? 1.0f : 0.0f;
            audioInstance.AudioSource.volume                = soundBank.VolumeScale;
            audioInstance.AudioSource.loop                  = soundBank.IsLooping;
            audioInstance.AudioSource.minDistance           = soundBank.MinDistance;
            audioInstance.AudioSource.maxDistance           = soundBank.MaxDistance;
            audioInstance.AudioSource.rolloffMode           = AudioRolloffMode.Linear;
            audioInstance.AudioSource.outputAudioMixerGroup = soundBank.AudioMixerGroup;
            audioInstance.SoundBank                         = soundBank;
            audioGroup.AddAudioInstance(audioInstance);
        }

        return(audioInstance);
    }
Пример #25
0
    private IEnumerator FadeAudioRoutine(AudioInstance audioInstance, float fromVolume, float toVolume, float duration)
    {
        for (float time = 0; time < duration; time += Time.deltaTime)
        {
            yield return(null);

            float t = time / duration;
            if (audioInstance.AudioSource != null)
            {
                audioInstance.AudioSource.volume = Mathf.Lerp(fromVolume, toVolume, t);
            }
            else
            {
                yield break;
            }
        }

        audioInstance.AudioSource.volume = toVolume;
        if (toVolume == 0)
        {
            StopSound(audioInstance.AudioSource.gameObject, audioInstance.SoundBank);
        }
    }
Пример #26
0
    public void Raise(Vector3 position, out AudioSource audioSource, out GameObject[] vfx)
    {
        if (sfx != null)
        {
            if (loopSFX)
            {
                audioSource = AudioInstance.LoopClipAtPoint(sfx, position, outputMixer, pitchRange);
            }
            else
            {
                AudioInstance.PlayClipAtPoint(sfx, position, outputMixer, pitchRange);
                audioSource = null;
            }
        }
        else
        {
            audioSource = null;
        }

        vfx = new GameObject[visualFX.Length];
        for (int i = 0; i < visualFX.Length; i++)
        {
            GameObject visualfx = visualFX[i];
            GameObject instance = FXPool.getFXObject(visualfx, poolSize);
            instance.transform.position = position;
            instance.transform.rotation = visualfx.transform.rotation;
            instance.transform.SetParent(null);
            instance.transform.localScale = Vector3.one;
            instance.SetActive(true);
            VisualFX vFX = instance.GetComponent <VisualFX>();
            if (vFX != null)
            {
                vFX.Play();
            }
            vfx[i] = instance;
        }
    }
Пример #27
0
    public void PlaySong(int id, int priority, AudioClip audio)
    {
        bool canPlay = false;

        if (audioInstance != null)
        {
            if (getIsPlaying())
            {
                if (!audioInstance.idIsEqual(id))
                {
                    if (audioHasPriority(audioInstance.getPriority(), priority))
                    {
                        audioInstance.setAudio(audio);
                        audioInstance.setPriority(priority);
                        canPlay = true;
                    }
                }
            }
            else
            {
                audioInstance.setAudio(audio);
                audioInstance.setPriority(priority);
                canPlay = true;
            }
        }
        else
        {
            audioInstance = new AudioInstance(id, priority, audio);
            canPlay       = true;
        }

        if (canPlay)
        {
            source.clip = audioInstance.getAudio();
            source.Play();
        }
    }
Пример #28
0
    public void PlaySong(int id, AudioClip audio)
    {
        bool canPlay = false;

        if (audioInstance != null)
        {
            audioInstance.setAudio(audio);
        }
        else
        {
            audioInstance = new AudioInstance(id, 100, audio);
        }

        if (!audioInstance.idIsEqual(id))
        {
            source.clip = audioInstance.getAudio();
            canPlay     = true;
        }

        if (canPlay)
        {
            source.Play();
        }
    }
Пример #29
0
    // Fade in a sound over a time period, if the source gets destroyed it will be cancelled
    public Coroutine FadeInSound(GameObject source, SoundBank soundBank, float duration, float toVolume = 1.0f)
    {
        AudioInstance audioInstance = PlaySound(source, soundBank, 0);

        return(StartCoroutine(FadeAudioRoutine(audioInstance, 0, toVolume, duration)));
    }
Пример #30
0
 public void RemoveAudioInstance(AudioInstance audioInstance)
 {
     _instanceMap.Remove(audioInstance.SoundBank);
 }