Unity FMOD音效抖動和延遲問題解決方案

2021-07-25 05:59:01 字數 1139 閱讀 5720

我們的專案之前使用fmod移植到android平台上時,有非常嚴重的延遲問題,之後通過更新新外掛程式版本以及針對個別手機進行特殊設定解決了音效的延遲問題。下面來講述聲音延遲問題的**和相應設定。

這個可以參考  的介紹,因為android系統預設使用opensl進行音訊輸出,而各個廠商對opensl的支援不是完美的,因此默寫機型會出現這些問題。

在我們專案的開發過程中,遇到有問題的機型包括:魅族mx3, samsung gt-s7898, 

samsung gt-s7562i, 華為g7, 榮耀4x 和 紅公尺2a。

問題的解決方案和上面的帖子介紹的方法類似,但是在unity中有點特殊。還是要在fmod初始化之前設定好fmod的輸出方式。

問題是unity本身自帶的音訊系統也是使用fmod的,該fmod模組使用了

fmod_outputtype_audiotrack這種輸出方式,因此當我們將我們使用的fmod設定成這種輸出方式後,所有的音效都會聽不見。

因此我們使用的輸出方式是sys.setoutput(fmod.outputtype.autodetect,新增的部分**如下:

#if unity_android && !unity_editor

}  } 

#endif

注意這點**需要在fmod.studio.system.initialize函式之前執行,否則不生效。

ps: 下面的方案是之前的方案,該方案針對出問題的機型設定dsp buffer的大小,可以解決卡頓的問題,但是會帶來延遲的問題,延遲會在0.5s左右。上面的方案目前位置沒有發現其他問題。暫時把不好的解決方案也貼在下面。

dsp buffer size的設定需要在fmod.studio.system::initialize函式之前執行,我的習慣是在fmod_studiosystem.cs中fmod_studiosystem::init函式中進行設定,設定**如下:

#if unity_android

fmod.system lowlevelsystem;

result = system.getlowlevelsystem(out lowlevelsystem);

if (result != fmod.result.ok)

if (lowlevelsystem != null) }

#endif

網路時延 傳送時延和傳播時延

一 時延的定義 時延是指乙個報文或分組從乙個網路的一端傳送到另乙個端所需要的時間。它包括了傳送時延,傳播時延,處理時延,排隊時延。時延 傳送時延 傳播時延 處理時延 排隊時延 一般,傳送時延與傳播時延是我們主要考慮的。對於報文長度較大的情況,傳送時延是主要矛盾 報文長度較小的情況,傳播時延是主要矛盾...

抖動和遲延

指最大遲延和最小遲延的差值即抖動遲延 運營商網路多為ms級別。在網路中經過的網路裝置層數越多經過裝置越多,就需要更多的處理時間去排隊等待 因此時延由此而來,抖動由此而來。從玩遊戲的角度出發的話,就是指你當前玩遊戲的電腦的客戶端和遊戲伺服器的服務端之間傳送資料所需的時間,這裡的資料就是當前玩的角色各項...

js 抖動和節流

傳遞事件物件 規定函式至少間隔多久執行 利用時間間隔,當事件觸發的時間間隔很短的時候,就認為使用者操作還處於未完成狀態,推遲事件處理程式的執行。text id input 簡單的防抖動函式 function debounce func,wait 事件處理程式 function realfunc co...