using UnityEngine; using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; using UnityEngine.UI; using System; using GameKitController.Audio; using UnityEngine.Networking; public class songsManager : MonoBehaviour { [Header ("Main Settings")] [Space] public bool loadSoundsInFolderEnabled = true; public string absolutePathBuild = "."; public string absolutePathEditor = "Music"; public List validExtensions = new List { ".ogg", ".wav" }; [Space] [Header ("Internal Songs List")] [Space] public bool useInternalSongsList; public List internalClips = new List (); public List internalAudioElements = new List (); [Space] [Header ("Debug")] [Space] public bool showDebugPrint; public bool songsLoaded; public List clips = new List (); public List audioElements = new List (); [Space] [Header ("Components")] [Space] public gameManager gameSystemManager; string absolutePath; int numberOfSongs; public const string mainManagerName = "Songs Manager"; public static string getMainManagerName () { return mainManagerName; } private static songsManager _songsManagerInstance; public static songsManager Instance { get { return _songsManagerInstance; } } bool instanceInitialized; public void getComponentInstance () { if (instanceInitialized) { return; } if (_songsManagerInstance != null && _songsManagerInstance != this) { Destroy (this.gameObject); return; } _songsManagerInstance = this; instanceInitialized = true; } void Awake () { getComponentInstance (); } void Start () { InitializeAudioElements (); bool mainGameManagerLocated = gameSystemManager != null; if (!mainGameManagerLocated) { gameSystemManager = gameManager.Instance; mainGameManagerLocated = gameSystemManager != null; } if (!mainGameManagerLocated) { gameSystemManager = FindObjectOfType (); gameSystemManager.getComponentInstanceOnApplicationPlaying (); mainGameManagerLocated = gameSystemManager != null; } if (mainGameManagerLocated) { if (gameSystemManager.isLoadGameEnabled () || loadSoundsInFolderEnabled) { if (Application.isEditor) { absolutePath = absolutePathEditor; } else { absolutePath = absolutePathBuild; } ReloadSounds (); } } } private void InitializeAudioElements () { if (clips != null && clips.Count > 0) { audioElements = new List (); foreach (var clip in clips) { audioElements.Add (new AudioElement { clip = clip }); } } if (internalClips != null && internalClips.Count > 0) { internalAudioElements = new List (); foreach (var clip in internalClips) { internalAudioElements.Add (new AudioElement { clip = clip }); } } } public List getSongsList () { return audioElements; } void ReloadSounds () { audioElements.Clear (); if (Directory.Exists (absolutePath)) { //print ("directory found"); absolutePath += "/"; // get all valid files System.IO.DirectoryInfo info = new System.IO.DirectoryInfo (absolutePath); var fileInfo = info.GetFiles () .Where (f => IsValidFileType (f.Name)) .ToArray (); numberOfSongs = fileInfo.Length; if (useInternalSongsList) { numberOfSongs += internalAudioElements.Count; } foreach (FileInfo s in fileInfo) { StartCoroutine (LoadFile (s.FullName)); } } else { if (showDebugPrint) { print ("Directory with song files doesn't exist. If you want to use the radio system, place some .wav files on the folder " + absolutePathEditor + " inside the project folder."); } } if (useInternalSongsList) { audioElements.AddRange (internalAudioElements); } } bool IsValidFileType (string fileName) { return validExtensions.Contains (Path.GetExtension (fileName)); // Alternatively, you could go fileName.SubString(fileName.LastIndexOf('.') + 1); that way you don't need the '.' when you add your extensions } IEnumerator LoadFile (string path) { using (UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip ("file://" + path, AudioType.WAV)) { yield return www.SendWebRequest (); if (www.error != null) { print ("some issue happening when trying to load file " + path); } else { AudioClip clip = DownloadHandlerAudioClip.GetContent (www); clip.name = Path.GetFileName (path); audioElements.Add (new AudioElement { clip = clip }); if (audioElements.Count == numberOfSongs) { songsLoaded = true; } } } //WWW www = new WWW ("file://" + path); //// print ("loading " + path); //AudioClip clip = www.GetAudioClip (false); //while (clip.loadState != AudioDataLoadState.Loaded) { // yield return www; //} ////print ("done loading"); //clip.name = Path.GetFileName (path); //audioElements.Add (new AudioElement { clip = clip }); //if (audioElements.Count == numberOfSongs) { // songsLoaded = true; //} } public bool allSongsLoaded () { return songsLoaded; } }