using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; // Unity www.GetAudioClip() only support wav public class SoundPool : PoolBase { public Dictionary sound_collection = new Dictionary(); public AudioClip GetAudioClip(string filename) { if (sound_collection.ContainsKey(filename) == false) { var info = GetFileInfo(filename); string path = info.FullName; string ext = info.Extension; #if false AudioClip clip = null; var www = new WWW("file://" + path); while (www.isDone == false) { } if (www.bytes.Length > 0) { clip = www.GetAudioClip(false, false, AudioType.AIFF); clip.name = filename; } else { Debug.Log(www.error); } www.Dispose(); sound_collection.Add(filename, clip); #else sound_collection.Add(filename, null); StartCoroutine(LoadAudio(path, filename, ext)); #endif } return sound_collection[filename]; } IEnumerator LoadAudio(string path, string filename, string extension) { #if false var www = new WWW("file://" + path); yield return www; if (www.bytes.Length > 0) { var clip = www.GetAudioClip(false); clip.name = filename; sound_collection[filename] = clip; } else { Debug.Log(www.error); } www.Dispose(); #else string uri = "file://" + path; string ext = GetFileInfo(filename).Extension; var type = AudioType.UNKNOWN; var comparison = System.StringComparison.CurrentCultureIgnoreCase; if (ext.Equals(".aif", comparison)) type = AudioType.AIFF; else if (ext.Equals(".wav", comparison)) type = AudioType.WAV; else if (ext.Equals(".acc", comparison)) type = AudioType.ACC; else if (ext.Equals(".ogg", comparison)) type = AudioType.OGGVORBIS; print(type); using (UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip(uri, type)) { #if UNITY_2017_1 yield return www.Send(); #else yield return www.SendWebRequest(); #endif if (www.isNetworkError) { Debug.Log(www.error); } else { AudioClip clip = DownloadHandlerAudioClip.GetContent(www); clip.name = filename; print("downloadedBytes: " + www.downloadedBytes); //clip.LoadAudioData(); sound_collection[filename] = clip; } } #endif } }