示例#1
0
 public void FrameUpdate(IntPtr envRenderer, Vector3 sourcePosition, Vector3 listenerPosition,
                         Vector3 listenerAhead, Vector3 listenerUp, float partialOcclusionRadius, OcclusionMode directOcclusionMode,
                         OcclusionMethod directOcclusionMethod)
 {
     directSoundPath = PhononCore.iplGetDirectSoundPath(envRenderer, listenerPosition, listenerAhead, listenerUp,
                                                        sourcePosition, partialOcclusionRadius, directOcclusionMode, directOcclusionMethod);
 }
示例#2
0
 public static extern DirectSoundPath iplGetDirectSoundPath(IntPtr environment,
                                                            Vector3 listenerPosition,
                                                            Vector3 listenerAhead,
                                                            Vector3 listenerUp,
                                                            Source source,
                                                            float sourceRadius,
                                                            OcclusionMode occlusionMode,
                                                            OcclusionMethod occlusionMethod);
示例#3
0
        public void AudioFrameUpdate(float[] data, int channels, bool physicsBasedAttenuation, float directMixFraction,
                                     bool directBinauralEnabled, bool applyAirAbsorption, HRTFInterpolation hrtfInterpolation,
                                     OcclusionMode directOcclusionMode, OcclusionMethod directOcclusionMethod)
        {
            DirectSoundEffectOptions directSoundEffectOptions;

            directSoundEffectOptions.applyDistanceAttenuation = physicsBasedAttenuation ? Bool.True : Bool.False;
            directSoundEffectOptions.applyAirAbsorption       = applyAirAbsorption ? Bool.True : Bool.False;
            directSoundEffectOptions.occlusionMode            = directOcclusionMode;

            AudioBuffer inputBuffer;

            inputBuffer.audioFormat         = inputFormat;
            inputBuffer.numSamples          = data.Length / channels;
            inputBuffer.deInterleavedBuffer = null;
            inputBuffer.interleavedBuffer   = data;

            AudioBuffer outputBuffer;

            outputBuffer.audioFormat         = outputFormat;
            outputBuffer.numSamples          = data.Length / channels;
            outputBuffer.deInterleavedBuffer = null;
            outputBuffer.interleavedBuffer   = data;

            for (int i = 0; i < data.Length; i++)
            {
                data[i] *= directMixFraction;
            }

            PhononCore.iplApplyDirectSoundEffect(directSoundEffect, inputBuffer, directSoundPath,
                                                 directSoundEffectOptions, outputBuffer);

            Vector3 directDirection = directSoundPath.direction;

            if ((outputFormat.channelLayout == ChannelLayout.Stereo) && directBinauralEnabled)
            {
                // Apply binaural audio to direct sound.
                PhononCore.iplApplyBinauralEffect(directBinauralEffect, outputBuffer, directDirection,
                                                  hrtfInterpolation, outputBuffer);
            }
            else if (outputFormat.channelLayout == ChannelLayout.Custom)
            {
                // Apply panning fo custom speaker layout.
                PhononCore.iplApplyPanningEffect(directCustomPanningEffect, outputBuffer, directDirection,
                                                 outputBuffer);
            }
        }
示例#4
0
 public static extern DirectSoundPath iplGetDirectSoundPath(IntPtr renderer, Vector3 listenerPosition, Vector3 listenerAhead, Vector3 listenerUp, Vector3 sourcePosition, float sourceRadius, OcclusionMode occlusionMode, OcclusionMethod occlusionMethod);