95 lines
2.7 KiB
C#
95 lines
2.7 KiB
C#
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<OnMusicFileSelected>();
|
|
newItem.GetComponentInChildren<Text>().text = file.Replace(Application.persistentDataPath, "");
|
|
}
|
|
|
|
}
|
|
|
|
|
|
public void CopyDataPath(){
|
|
GUIUtility.systemCopyBuffer = Application.persistentDataPath;
|
|
}
|
|
}
|