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;
    }
相關文章
相關標籤/搜索