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