目前,我正在通过网络进行流音频到团结的工作,我成功地将媒体库(GStreamer)与团结集成在一起,并且我能够使用附带在AudioSource上的音频过滤器回调函数在环境中播放音频:
void OnAudioFilterRead(float[] data, int channels)
{
// fill data array with the streamed audio data
//....
}
之前的功能提供了非常低延迟的2D音频播放,
在我的应用程序中,我希望在三维空间中呈现音频,因此音频呈现将取决于摄像机(音频侦听器)的方向。
我尝试使用以下方法将音频数据流到AudioClip中:
AudioClip TargetClip;
public AudioSource TargetSrc;
void Start()
{
int freq=32000; //streamed audio sampling rate
TargetClip = AudioClip.Create ("test_Clip", freq, 1, freq, true,true, OnAudioRead,OnAudioSetPosition);
TargetSrc.clip = TargetClip;
TargetSrc.Play ();
}
void OnAudioRead(float[] data) {
// fill data array with the streamed audio data
//....
}
void OnAudioSetPosition(int newPosition) {
}
当我播放音频时,音频是按我的意愿在3D空间中呈现的,但是有一个巨大的延迟(超过2秒)。
有什么办法解决延迟问题吗?
发布于 2016-08-11 13:43:31
我想出了解决这个问题的办法。
对于那些面临类似问题的人,实际上,通过填充AudioClip数据,我最初使用的方法并不有效。在这两种情况下,我都应该使用OnAudioFilterRead(),但是它应该用于空间音频计算,如下所示:
public AudioSource TargetSrc;
void Start()
{
var dummy = AudioClip.Create ("dummy", 1, 1, AudioSettings.outputSampleRate, false);
dummy.SetData(new float[] { 1 }, 0);
TargetSrc.clip = dummy; //just to let unity play the audiosource
TargetSrc.loop = true;
TargetSrc.spatialBlend=1;
TargetSrc.Play ();
}
void OnAudioFilterRead(float[] data, int channels)
{
// "data" contains the weights of spatial calculations ready by unity
// multiply "data" with streamed audio data
for(int i=0;i<data.Length;++i)
{
data[i]*=internal_getSample(i);
}
}
希望这会对其他人有所帮助。
https://stackoverflow.com/questions/38843408
复制相似问题