2016-08-09 36 views
0

現在、私はネットワークを介してUnityにオーディオをストリーミングする作業をしており、Unityにメディアライブラリ(GStreamer)を正常に統合しており、オーディオフィルタコールバック機能を使用して環境内でオーディオを再生することができました。 AudioSource:リアルタイム3Dオーディオストリーミングと再生

void OnAudioFilterRead(float[] data, int channels) 
{ 
     // fill data array with the streamed audio data 
     //.... 
} 

非常に低遅延で2Dオーディオ再生を提供し、以前の機能、私のアプリケーションで

私は、3D空間のスペースにオーディオをレンダリングするので、オーディオレンダリングは、カメラの(オーディオに依存することになりますリスナー)の向き。

は、私が使用したAudioClipにオーディオデータをストリーミングしようとした次:私は、オーディオを再生したとき、私は、3D空間の空間に望んでいたよう

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) { 

} 

、オーディオがレンダリングされた、しかし巨大な待ち時間があった(以上に2秒)。

遅延問題を解決する方法はありますか?

+0

[マニュアルページ](https://docs.unity3d.com/Manual/AudioSpatializerSDK.html)を見ましたか? [Propagate](https://www.assetstore.unity3d.com/en/#!/content/40200)という非常に優れたオーディオプラグインがあります。 – Rob

答えて

0

私はこの問題を解決する方法を考え出しました。

同様の問題に直面している人にとって、私が最初に使用していた方法は、AudioClipデータを埋め込むことで効率的ではありませんでした。これは、いくつかの他を助ける

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); 
    } 
} 

ホープ:私は、しかし、それは空間オーディオ計算に次のように使用する必要があり、いずれの場合にOnAudioFilterRead()を使用することになりました。

関連する問題