首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >实时三维音频流和播放

实时三维音频流和播放
EN

Stack Overflow用户
提问于 2016-08-09 06:18:03
回答 1查看 1.6K关注 0票数 0

目前,我正在通过网络进行流音频到团结的工作,我成功地将媒体库(GStreamer)与团结集成在一起,并且我能够使用附带在AudioSource上的音频过滤器回调函数在环境中播放音频:

代码语言:javascript
运行
复制
void OnAudioFilterRead(float[] data, int channels)
{
      // fill data array with the streamed audio data
      //....
}

之前的功能提供了非常低延迟的2D音频播放,

在我的应用程序中,我希望在三维空间中呈现音频,因此音频呈现将取决于摄像机(音频侦听器)的方向。

我尝试使用以下方法将音频数据流到AudioClip中:

代码语言:javascript
运行
复制
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秒)。

有什么办法解决延迟问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-11 13:43:31

我想出了解决这个问题的办法。

对于那些面临类似问题的人,实际上,通过填充AudioClip数据,我最初使用的方法并不有效。在这两种情况下,我都应该使用OnAudioFilterRead(),但是它应该用于空间音频计算,如下所示:

代码语言:javascript
运行
复制
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);
    }
}

希望这会对其他人有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38843408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档