AudioPlayer.cs
using NAudio.Wave;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
public class AudioPlayer : MonoBehaviour
{
public Text debugText;
private AudioSource audioSource;
private bool state = false;
DirectoryInfo directoryInfoDataPath;
private void Start()
{
audioSource = GetComponent<AudioSource>();
directoryInfoDataPath = new DirectoryInfo(Application.dataPath + "/Music");
if (!directoryInfoDataPath.Exists) //存不存在吗,music文件夹
{
Directory.CreateDirectory(Application.dataPath + "/Music");
}
string musicText = directoryInfoDataPath + "/请将音频文件放于此处.txt";
if (!File.Exists(musicText))
{
File.WriteAllText(musicText, "目前仅支持wav、mp3、ogg格式的音频");
}
string path = Application.dataPath + "/Music/wav";
DirectoryInfo directoryInfo = new DirectoryInfo(path);
if (!directoryInfo.Exists) //存不存在转码后的文件夹
{
Directory.CreateDirectory(path);
}
}
private void LoadAudioByIndex(FileInfo path) // 靠文件名来加载 // E:\Project\Kinect Project\Assets\Music
{
try
{
if (path.ToString().Contains("mp3"))
{
string filename = Application.dataPath + "/Music/wav/" + path.Name.Replace("mp3", "wav");//这个wav文件存不存在
if (!File.Exists(filename)) //不存在转码后的文件
{
LoadAudio(path.ToString(), filename);
}
else //存在
{
StartCoroutine(LoadWav(filename));
}
}
else if (path.ToString().Contains("ogg") || path.ToString().Contains("wav"))
{
StartCoroutine(LoadWav(path.ToString()));
}
}
catch (Exception e)
{
debugText.text = "音频载入有误,此音频为" + path.Name + e;
}
finally
{
}
}
IEnumerator LoadWav(string file)
{
var www = new WWW("file://" + file);
yield return www;
audioSource.clip = www.GetAudioClip();
audioSource.Play();
state = false;
}
void LoadAudio(string filepath, string savepath) //转换音频文件格式
{
var stream = File.Open(filepath, FileMode.Open);
var reader = new Mp3FileReader(stream);
WaveFileWriter.CreateWaveFile(savepath, reader);
StartCoroutine(LoadWav(savepath));
}
private void Update()
{
if (!audioSource.isPlaying && !state)
{
RefreshListAndPlay();
}
if (Input.GetKeyDown(KeyCode.Space))
{
RefreshListAndPlay();
}
}
void RefreshListAndPlay()
{
FileInfo[] filesmp3 = directoryInfoDataPath.GetFiles("*.mp3"); //MP3文件的数量
FileInfo[] fileogg = directoryInfoDataPath.GetFiles("*.ogg");
FileInfo[] filewav = directoryInfoDataPath.GetFiles("*.wav");
int range = filesmp3.Length + fileogg.Length + filewav.Length; //播放完毕后刷新列表数量
FileInfo[] allMusic = filesmp3.Concat(fileogg).ToArray().Concat(filewav).ToArray();
if (allMusic.Length == 0)
{
debugText.text = "请将音频放在Run_Data/Music文件夹下";
return;
}
int num = UnityEngine.Random.Range(0, allMusic.Length);
LoadAudioByIndex(allMusic[num]);//随机去加载music文件夹下的音频
state = true;
}
}
// 123456Xiewen1432
//string file = directoryInfoDataPath + "/wav/" + i + ".wav"; //这个wav文件存不存在
//if (!File.Exists(file))
//{
// string mp3name = Application.dataPath + "/Music/" + i + ".mp3"; //只有MP3文件才需要转码
// if (File.Exists(mp3name))
// {
// LoadAudio(mp3name, file);
// }
// else
// {
// string oggname = Application.dataPath + "/Music/" + i + ".ogg"; // ogg文件
// string wavname = Application.dataPath + "/Music/" + i + ".wav"; //wav文件
// if (File.Exists(oggname))
// {
// StartCoroutine(LoadWav(oggname));
// }
// else if (File.Exists(wavname))
// {
// StartCoroutine(LoadWav(wavname));
// }
// else //其他文件或者没有找到i.mp3
// {
// // LoadAudioByIndex(1);
// }
// }
//}
//else
//{
// StartCoroutine(LoadWav(file));
//}
需要 naduio.dll插件
网友评论