unity踩過的音頻坑

支持格式

官方說支持aif, wav, ogg, mp3,少就少吧,這些格式還並不是全平臺通用,放個mp3,windows,mac平臺會告訴你說不支持react

file

在build settings中修改爲android後沒問題了,ios沒試過。android


麻煩的讀取

對於音頻的讀取須要手動指定,徹底是坑爹的操做,react native, flutter哪一個不是直接拿來用就成了?你得指定用哪一種格式來讀取。ios

file

上面這個錯誤是由於我讀取參數忘記改了,一讀ogg就出錯。windows

using (var uwr = UnityWebRequestMultimedia.GetAudioClip(path, AudioType.MPEG))
        {
				...

應該寫成AudioType.OGGVORBIS,搞笑的AudioType裏面有ACC,而後看註釋:網絡

//
    // 摘要:
    //     Type of the imported(native) data.
    public enum AudioType
    {
        //
        // 摘要:
        //     3rd party / unknown plugin format.
        UNKNOWN = 0,
        //
        // 摘要:
        //     Acc - not supported.
        ACC = 1,

ACC不支持,讓我有種 某天回家老婆開心的對我說:老公,咱中500萬大獎了,而後再加句:逗你玩 的感受。函數


本地、遠程表現不一致

使用本地asset中的聲音來播放,徹底沒毛病,遇到網絡下載時播放,有可能聲音會不完整((wtf)),一開始還覺得是本身的程序有毛病,後來發現播放CBR格式mp3是OK的。
解決辦法:將mp3轉換成CBR,固定碼率。建議使用lame來進行轉換,ffmpeg轉換CBR並不方便,試了不少次,默認轉換後的mp3都是VBR格式的(動態碼率)。(這樣說來其實mp3音頻仍是CBR的兼容性最好。)
另:發現ffmpeg中碼率不一致的大機率出毛病,好比:工具

Input #0, mp3, from 'a duck swimming in the sink1.mp3':
  Metadata:
    encoder         : Lavf58.37.100
  Duration: 00:00:01.73, start: 0.069063, bitrate: 33 kb/s
    Stream #0:0: Audio: mp3, 16000 Hz, mono, fltp, 32 kb/s

duration中的bitrate與stream中的並不一致,這樣的文件在unity網絡播放時就會出毛病,使用mediainfo時顯示信息以下:ui

格式                             : MPEG Audio
格式版本                           : Version 2
格式配置 (Profile)                 : Layer 3
時長                             : 1 秒 728 毫秒
碼率模式                           : 動態碼率 (VBR)
碼率                             : 32.0 kb/s
聲道數                            : 1 聲道
採樣率                            : 16.0 kHz
幀率                             : 27.778 FPS (576 SPF)
壓縮模式                           : 有損
流大小                            : 6.75 KiB (97%)
編碼函數庫                          : LAME3.100

本文由博客羣發一文多發等運營工具平臺 OpenWrite 發佈編碼

相關文章
相關標籤/搜索