[Unity 3D]Load Mp3 into Audioclip(跨平臺的動態(tài)加載Mp3方案) - Github

這是一個跨平臺的動態(tài)加載MP3方案。支持 WWW 加載 MP3 喲!

GitHub 上的工程多如繁星,有些好的倉庫,但凡不經(jīng)意間錯過了就很難找回,故稍作采擷,希望能幫助到有心人。
本文集以一個小的功能點(diǎn)為單位行文,也便于拾取罷!

簡介:

筆者今天推薦的倉庫叫 Load-Mp3-into-Audioclip。
這是一個用于替換 WWW 加載方案的基于 NLayer解碼器 跨平臺的 MP3 加載方案。

功能:

普遍現(xiàn)象就是用戶都有使用 www 加載過 MP3 ,如下:

WWW www = new WWW("MyMp3File.mp3");
yield return www;
audiosource.clip = www.GetAudioClip();

然而,不管是 MAC 還是 PC 都會報(bào)錯:

Streaming of 'mp3' on this platform is not supported
UnityEngine.WWWAudioExtensions:GetAudioClip(WWW)
<Start>c__Iterator0:MoveNext() (at Assets/TestLoader.cs:16)
UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)

也就是說,目前為止,WWW 對加載 mp3 不友好,所以就有了這個基于 NLayer 的解決方案了。

示例:

熟悉的(偽)鏈?zhǔn)斤L(fēng)格哈:

using NLayer;
using UnityEngine;

public static class Mp3Loader {
  public static AudioClip LoadMp3(string filePath) {
    string filename = System.IO.Path.GetFileNameWithoutExtension(filePath);

    MpegFile mpegFile = new MpegFile(filePath);

    // assign samples into AudioClip
    AudioClip ac = AudioClip.Create(filename,
                                    (int)(mpegFile.Length / sizeof(float) / mpegFile.Channels),
                                    mpegFile.Channels,
                                    mpegFile.SampleRate,
                                    true,
                                    data => { int actualReadCount = mpegFile.ReadSamples(data, 0, data.Length); },
                                    //上面的回調(diào)不能少,下面的回調(diào)經(jīng)筆者測試,就算不要也能正常搞事情!
                                    position => { mpegFile = new MpegFile(filePath); }
                                  );

    return ac;
  }
}

Tips:

  1. 使用該解決方案 API Compatibility Level 必須不能為 .Net 2.0 Subset??!請作如下圖設(shè)置:



    否則會報(bào)錯,如下圖:


    使用子集會報(bào)這個錯誤
  2. 這個倉庫的作者只是做了一個 IO 路徑的 mp3 文件加載,那網(wǎng)絡(luò)的怎么加載呢?
    OK,也很容易的,就是把 WWW 加載出來的數(shù)據(jù)使用 MemoryStream 包裹著在創(chuàng)建MPEGFile對象時(shí)給它就好啦。

        MpegFile mpegFile = new MpegFile(stream);

具體Demo 見GitHub↓
Bian-Sh/UniMP3RuntimeLoader

鏈接:

Load-Mp3-into-Audioclip

結(jié)語:

  • 前些日子總是見有人問Unity怎么加載MP3呀,Unity 加載 Mp3 報(bào)錯呀 這些問題,今天逛github剛好看到了,何不搬出來曬曬太陽呢,說不定就能幫助到有需要的人呢,哈哈??!

  • 筆者認(rèn)為其實(shí)真相并不是Unity 不支持 mp3 而是PC平臺(mac+windows)上的mpeg解碼器不是 unity 適配的那一款,往后應(yīng)該會支持的吧!

擴(kuò)展閱讀:

  1. unity 播放網(wǎng)絡(luò)MP3的多種方法 - 辣椒醬的博客 - CSDN博客 - 該作者已在留言板申明只適合移動端。
  2. C# 獲取 mp3文件信息 - 簡書 - 使用Stream時(shí)獲取歌曲名稱能用的上!
  3. [Unity 3d] LyricParser(歌詞轉(zhuǎn)換器) - GitHub - 簡書
    本文集持續(xù)更新ing,喜歡記得點(diǎn)贊關(guān)注哦!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容