using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; namespace UltraCombos { public class SoundLoader : MonoBehaviour { [SerializeField] string folder; [SerializeField] List filenames = new List(); List clips = new List(); AudioSource source = null; float target_volume = 1.0f; private void Start() { if (filenames.Count == 0) { string filename = gameObject.name; LoadFile(filename); } else { foreach (var filename in filenames) { LoadFile(filename); } } source = gameObject.AddComponent(); } void LoadFile(string filename) { string path = $"{Application.dataPath}/../../{folder}/{filename}"; if (System.IO.File.Exists(path)) { var ext = System.IO.Path.GetExtension(path); AudioType type = AudioType.UNKNOWN; if (ext.Equals(".AIF", System.StringComparison.CurrentCultureIgnoreCase)) { type = AudioType.AIFF; } else if (ext.Equals(".WAV", System.StringComparison.CurrentCultureIgnoreCase)) { type = AudioType.WAV; } if (type != AudioType.UNKNOWN) { StartCoroutine(LoadAudioFile($"file://{path}", type)); } else { } } } private void Update() { source.volume = Mathf.Lerp(source.volume, target_volume, Time.deltaTime); } public void PlayOneShot() { if (clips.Count > 0) source.PlayOneShot(clips[Random.Range(0, clips.Count)]); } public void FadeIn() { if (clips.Count == 0) return; source.clip = clips[0]; source.Play(); source.volume = 0.0f; target_volume = 1.0f; } public void FadeOut() { if (clips.Count == 0) return; target_volume = 0.0f; } IEnumerator LoadAudioFile(string uri, AudioType type) { using (var www = UnityWebRequestMultimedia.GetAudioClip(uri, type)) { yield return www.SendWebRequest(); if (www.isNetworkError || www.isHttpError) { Debug.Log(www.error); } else { using (var hanlder = www.downloadHandler as DownloadHandlerAudioClip) { if (hanlder != null) { clips.Add(hanlder.audioClip); } } } yield return null; } } } }