using NAudio.Wave; using System; using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; using UnityEngine.Networking; public class MediaPlayer : MonoBehaviour { public static MediaPlayer Instance; public AudioSource audio_source; private void Awake() { Instance = this; } // Start is called before the first frame update void Start() { audio_source = UIScene.Instance.audio_source; } public string media; private void Update() { if (play_audio_while_loaded && !audio_loading) { play_audio_while_loaded = false; audio_source?.Play(); } } /// /// 原加载音频 /// /// /// public void AudioLoad(string _file_name, Action _callback = null) { if (string.IsNullOrEmpty(_file_name)) { if (_callback != null) { _callback(false, "无此音频:" + _file_name); } return; } audio_loading = true; var __res = MediaViwerPanel.file_dic.Find(x => x.file_name_text.text.Equals(_file_name)); var url = ""; if (null != __res) { url = __res.file_path; } else { if (_callback != null) { _callback(false, "无此音频:" + _file_name); } return; } FileInfo fileInfo = new FileInfo(@url); var directoryUrl = Path.Combine(System.Environment.CurrentDirectory + "/Cache"); var cacheUrl = Path.Combine(System.Environment.CurrentDirectory + "/Cache", fileInfo.Name.Replace(".mp3", ".wav")); if (!Directory.Exists(directoryUrl)) { Directory.CreateDirectory(directoryUrl); } if (!File.Exists(@cacheUrl)) { using (var audioStrem = new Mp3FileReader(@url)) { WaveFileWriter.CreateWaveFile(@cacheUrl, audioStrem); } } StartCoroutine(LoadAudio(@cacheUrl, fileInfo.Name, _callback)); } /// /// 新加载音频 /// /// /// public void NewAudioLoad(string _file_name, Action _callback = null) { ConsolePanel.ConsoleOutput("正在加载语音", "log"); if (File.Exists(_file_name)) { //判断格式 string ex = Path.GetExtension(_file_name); if(ex==".mp3") { var directoryUrl = Path.Combine(System.Environment.CurrentDirectory + "/Cache"); var cacheUrl = Path.Combine(System.Environment.CurrentDirectory + "/Cache", Path.GetFileNameWithoutExtension(_file_name)+ ".wav"); if (!Directory.Exists(directoryUrl)) { Directory.CreateDirectory(directoryUrl); } if (!File.Exists(@cacheUrl)) { using (var audioStrem = new Mp3FileReader(_file_name)) { WaveFileWriter.CreateWaveFile(@cacheUrl, audioStrem); } } StartCoroutine(LoadAudio(@cacheUrl,Path.GetFileName(cacheUrl) , _callback)); } else if(ex == ".wav") { StartCoroutine(LoadAudio(_file_name, Path.GetFileName(_file_name), _callback)); } else { if (_callback != null) { _callback(false, "音频格式不支持:" + ex); } } } else { if (_callback != null) { _callback(false, "无此音频:" + _file_name); } } } bool audio_loading; /// /// 加载音频 /// /// /// private IEnumerator LoadAudio(string _url, string _file_name, Action _callback = null) { audio_loading = true; using (UnityWebRequest request = UnityWebRequestMultimedia.GetAudioClip(@_url, AudioType.WAV)) { yield return request.SendWebRequest(); var audio_clip = DownloadHandlerAudioClip.GetContent(request); if (audio_clip != null) audio_source.clip = audio_clip; audio_loading = false; _callback?.Invoke(true, Path.GetFileNameWithoutExtension(_file_name)); } } /// /// 加载完毕后播放 /// bool play_audio_while_loaded; /// /// 播放音乐 /// public void AudioPlay() { if (audio_source?.clip != null && !audio_loading) audio_source?.Play(); else play_audio_while_loaded = true; } public void AudioPause() { audio_source?.Pause(); } public void AudioStop() { audio_source?.Stop(); } public void AudioSetVolume(float _volume) { if (audio_source) audio_source.volume = _volume; } }