public static int GetCoeffCount(AmbisonicOrder order) { if (order == AmbisonicOrder.First) { return(4); } else if (order == AmbisonicOrder.Second) { return(9); } else if (order == AmbisonicOrder.Third) { return(16); } return(0); }
internal void Setup(AmbisonicOrder order, AmbisonicChannelOrder channelOrder, AmbisonicNormalisation normalisation, int bufferCount) { Debug.Assert(bufferCount > 1 && bufferCount < 100); lock (this) { _order = order; _channelOrder = channelOrder; _normalisation = normalisation; int sampleCount = Ambisonic.GetCoeffCount(order) * AudioSettings.outputSampleRate / 10; // 1/10 second buffer _activeSampleIndex = 0; _activeSamples = null; _fullBuffers.Clear(); _emptyBuffers.Clear(); for (int i = 0; i < bufferCount; i++) { float[] buffer = new float[sampleCount]; _emptyBuffers.Enqueue(buffer); } UpdateCoefficients(); } }
public static extern void EncodeMonoToAmbisonic(IntPtr instance, float[] inSamples, int inSamplesOffset, int inFrameCount, int inChannelCount, float[] outSamples, int outSamplesOffset, int outSamplesLength, AmbisonicOrder order);
public static extern void UpdateAmbisonicWeights(IntPtr instance, float azimuth, float elevation, AmbisonicOrder order, AmbisonicChannelOrder channelOrder, float[] normalisationWeights);