using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; using UnityEngine.Networking; public static class LocalAudioLoader { /// /// 加载文件夹下所有音频文件 /// /// 音频文件夹完整路径 /// 加载完成回调 public static IEnumerator LoadAudios( string folderPath, System.Action> onComplete) { List clips = new List(); if (!Directory.Exists(folderPath)) { Debug.LogError($"[LocalAudioLoader] 文件夹不存在: {folderPath}"); onComplete?.Invoke(clips); yield break; } string[] files = Directory.GetFiles(folderPath); foreach (string file in files) { if (!IsAudioFile(file)) continue; string url = "file://" + file; using (UnityWebRequest request = UnityWebRequestMultimedia.GetAudioClip(url, GetAudioType(file))) { yield return request.SendWebRequest(); if (request.result != UnityWebRequest.Result.Success) { Debug.LogError($"音频加载失败: {file}\n{request.error}"); continue; } AudioClip clip = DownloadHandlerAudioClip.GetContent(request); clip.name = Path.GetFileNameWithoutExtension(file); clips.Add(clip); } } onComplete?.Invoke(clips); } /// /// 加载单个本地音频文件 /// /// 音频完整路径 /// 加载完成回调 public static IEnumerator LoadAudio( string filePath, System.Action onComplete) { if (!File.Exists(filePath)) { Debug.LogError($"[LocalAudioLoader] 音频不存在: {filePath}"); onComplete?.Invoke(null); yield break; } if (!IsAudioFile(filePath)) { Debug.LogError($"[LocalAudioLoader] 非音频格式: {filePath}"); onComplete?.Invoke(null); yield break; } string url = "file://" + filePath; using (UnityWebRequest request = UnityWebRequestMultimedia.GetAudioClip(url, GetAudioType(filePath))) { yield return request.SendWebRequest(); if (request.result != UnityWebRequest.Result.Success) { Debug.LogError($"音频加载失败: {filePath}\n{request.error}"); onComplete?.Invoke(null); yield break; } AudioClip clip = DownloadHandlerAudioClip.GetContent(request); clip.name = Path.GetFileNameWithoutExtension(filePath); onComplete?.Invoke(clip); } } private static bool IsAudioFile(string path) { string ext = Path.GetExtension(path).ToLower(); return ext == ".wav" || ext == ".ogg" || ext == ".mp3"; } private static AudioType GetAudioType(string path) { string ext = Path.GetExtension(path).ToLower(); switch (ext) { case ".wav": return AudioType.WAV; case ".ogg": return AudioType.OGGVORBIS; case ".mp3": return AudioType.MPEG; default: return AudioType.UNKNOWN; } } }