using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; using UnityEngine.Networking; using UnityEngine.UI; public class MusicLoader : MonoBehaviour { public AudioSource audioSource; public Text txtPath; public RectTransform musicFileSelectionParent; public GameObject musicFileSelectionPrefab; public GameObject musicFilePanel; public static MusicLoader instance; void Awake(){ instance= this; } public void ShowMusicFileSelection(){ musicFilePanel.SetActive(true); PopulateMusicFileSelection(); } public void OnFileSelected(string file, bool containsRoot = false){ musicFilePanel.SetActive(false); LoadFile(containsRoot ? file : (Application.persistentDataPath + file)); } public void LoadFile(string file){ txtPath.text = file; if(file.Contains("\\")){ txtPath.text = file.Replace("\\","/"); } StartCoroutine(LoadAudioCoroutine(file)); } private IEnumerator LoadAudioCoroutine(string fileName) { string filePath = Path.Combine(Application.persistentDataPath, fileName); string url = "file://" + filePath; UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip(url, AudioType.WAV); // Use AudioType.MPEG for MP3 files yield return www.SendWebRequest(); if (www.result == UnityWebRequest.Result.ConnectionError || www.result == UnityWebRequest.Result.ProtocolError) { Debug.LogError(www.error); } else { AudioClip clip = DownloadHandlerAudioClip.GetContent(www); audioSource.clip = clip; AudioAnalyzer.instance.audioClip = clip; AudioAnalyzer.instance.updateData(); // audioSource.Play(); } } void Start() { txtPath.text = Application.persistentDataPath; PopulateMusicFileSelection(); } public void PopulateMusicFileSelection(){ for(int i=0; i < musicFileSelectionParent.childCount; i++){ Destroy(musicFileSelectionParent.GetChild(i).gameObject); } string[] files =Directory.GetFiles(Application.persistentDataPath); foreach(string file in files){ if(!file.Contains(".wav")){continue;} GameObject newItem = Instantiate(musicFileSelectionPrefab, musicFileSelectionParent); newItem.AddComponent(); newItem.GetComponentInChildren().text = file.Replace(Application.persistentDataPath, ""); } } public void CopyDataPath(){ GUIUtility.systemCopyBuffer = Application.persistentDataPath; } }