美文网首页unity
unity 动态加载MP3音频

unity 动态加载MP3音频

作者: Walk_In_Jar | 来源:发表于2018-02-01 18:43 被阅读386次

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插件

相关文章

网友评论

    本文标题:unity 动态加载MP3音频

    本文链接:https://www.haomeiwen.com/subject/sthjzxtx.html