赞
踩
在Unity上面做音游,当在移动端实机运行起来,会发现,音频的发出会有一定的延迟,无论是长音效还是短音效,Unity内置的Audio内部使用的是FMOD,有以下手段改善
通过设置稍微改善其延迟的问题
Edit → Project Settings → Audio → 设置DSP Buffer size为Best latency(设置 dsp 缓冲区大小以优化延迟或性能,设置一个不合适的值会导致安卓设备的电流音)
音频文件的Load Type为Decompress On Load(让音频提前读取到缓存中)
让音频文件越小越好
代码来获取准确的音轨采样时间
糟糕的方式
AudioSource audioSource;
//100ms延迟
float GetTrackTime()
{
return audioSource.time;
}
好的方式
//20ms延迟
float GetTrackTime()
{
return 1f * audioSource.timeSamples / audioSource.clip.frequency;
}
更好的方式
double trackStartTime;
void StartMusic()
{
trackStartTime = AudioSettings.dspTime + 1;
audioSource.PlayScheduled(trackStartTime);
}
double GetTrackTime()
{
return AudioSettings.dspTime - trackStartTime;
}
最好的方式
Stopwatch stopwatch = new Stopwatch();
void StartMusic()
{
audioSource.Play();
stopwatch.Start();
}
double GetTrackTime()
{
return stopwatch.ElapsedMilliseconds/1000f;
}
//timeSample的Get方法受限与音频异步的问题是有20ms的延迟的,但是Set方法几乎没有延迟
void SetTrackTime(float time)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。