支持格式
官方說支持aif, wav, ogg, mp3,少就少吧,這些格式還並非全平台通用,放個mp3,windows,mac平台會告訴你說不支持
在build settings中修改成android后沒問題了,ios沒試過。
麻煩的讀取
對於音頻的讀取需要手動指定,完全是坑爹的操作,react native, flutter哪個不是直接拿來用就成了?你得指定用哪種格式來讀取。
上面這個錯誤是因為我讀取參數忘記改了,一讀ogg就出錯。
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時顯示信息如下:
格式 : 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 發布