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); }
public AudioInstance GetAudioInstance(SoundBank forSoundBank) { AudioInstance audioInstance = null; _instanceMap.TryGetValue(forSoundBank, out audioInstance); return(audioInstance); }
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); } } }
/// <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); }
// INTERNAL CALLED BY STATIC public void SetGeneralVolumeFrk(float NewValue) { _GeneralVolume = NewValue; for (int i = 0; i < GetAudioCount(); i++) { AudioInstance Inst = GetAudio(i); Inst.CalculateVolume(); } }
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); } }
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); }
// 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))); }
// 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(); } } }
// 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)); } }
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(); }
public void PlaySong(AudioClip audio) { if (audioInstance != null) { audioInstance.setAudio(audio); } else { audioInstance = new AudioInstance(0, 100, audio); } source.clip = audioInstance.getAudio(); source.Play(); }
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); } } } }
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); } } } }
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(); }
/// <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); }
// 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); }
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); }
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); } }
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); }
// 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); }
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); } }
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); } }
// 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); }
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); } }
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; } }
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(); } }
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(); } }
// 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))); }
public void RemoveAudioInstance(AudioInstance audioInstance) { _instanceMap.Remove(audioInstance.SoundBank); }