ProjectSquareBall/Assets/Scripts/Prep/MusicLoader.cs
2024-09-04 18:39:41 +05:30

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;
}
}