unity使用www获取网络或本地mp3,并加载为audioclip(PC端)

unity下进行pc端开发的时候,仅支持使用脚本动态加载wav和ogg格式的音频文件,而ios和安卓端却支持直接加载mp3文件,而mp3格式的音频文件体积小,更为通用,因此不少时候须要pc端也使用mp3文件。ios

要在pc端加载mp3,须要使用两个库,首先,是NAudio,用于将mp3转为wav,NAudio对Unity老版本的支持不太好,这里有好心人作了个适用于unity的Naudio:git

https://github.com/WulfMarius/NAudio-Unitygithub

而后是unityWav库,用于将流或者byte加载到AudioClip以供unity使用:url

https://github.com/deadlyfingers/UnityWavcode

unityWav库很小,就一个文件WavUtility.cs,下载下来放在script目录下便可。ip

NAudio-Unity使用vs打开工程,编译出NAudio-Unity.dll放在Plugin目录下便可。开发

代码以下:get

public Button bStart;
    public Text tTip;

    void Start () {
        bStart.onClick.AddListener(OnStartClick);
    }

    void OnStartClick()
    {
        string mp3file = "file:///d:/test.mp3"; //本地的mp3音频
        string mp3url = "http://xx.xx.com/test.mp3";  //网上的的mp3音频
        StartCoroutine(Mp3toClip(mp3url));  //根据状况选择
    }


    public AudioSource au; //用于播放音频的AudioSource
    IEnumerator Mp3toClip(string mp3Position)
    {
        WWW www = new WWW(mp3Position);
        yield return www;

        if (www.isDone)
        {
            var stream = new MemoryStream(www.bytes);
            var reader = new Mp3FileReader(stream);

            //若是要保存为本地的mp3文件,则使用下面两条语句
            //FileStream filestream = new FileInfo("d:/test.mp3").Create();
            //filestream.Write(www.bytes, 0, www.bytes.Length);

            //若是须要保存为本地的wav文件,则使用下面的语句
            //WaveFileWriter.CreateWaveFile("d:/test.wav", reader);
            
            var outstream = new MemoryStream();
            WaveFileWriter.WriteWavFileToStream(outstream, reader);

            //加载为AudioClip
            au.clip = WavUtility.ToAudioClip(outstream.ToArray(), 0);
            au.Play(); //播放音频
        }
        yield break;
    }
相关文章
相关标签/搜索