Esempio n. 1
0
    /// <summary>
    /// Calculates DSP settings for the specified listener and emitter. See remarks.
    /// </summary>
    /// <param name="listener">The <see cref="Listener"/>.</param>
    /// <param name="emitter">The <see cref="Emitter"/>.</param>
    /// <param name="flags">The <see cref="CalculateFlags"/>.</param>
    /// <param name="settings">The <see cref="DspSettings"/>.</param>
    /// <remarks>The source and destination channel count must be set on <see cref="DspSettings" /> before calling this method.</remarks>
    public void Calculate(Listener listener, Emitter emitter, CalculateFlags flags, DspSettings settings)
    {
        if (settings == null)
        {
            throw new ArgumentNullException(nameof(settings));
        }

        DspSettings.__Native settingsNative;
        settingsNative.SrcChannelCount = settings.SourceChannelCount;
        settingsNative.DstChannelCount = settings.DestinationChannelCount;

        unsafe
        {
            fixed(void *pMatrix = settings.MatrixCoefficients)
            {
                fixed(void *pDelays = settings.DelayTimes)
                {
                    settingsNative.MatrixCoefficientsPointer = (IntPtr)pMatrix;
                    settingsNative.DelayTimesPointer         = (IntPtr)pDelays;

                    XAudio2Native.X3DAudioCalculate(ref _handle, listener, emitter, flags, new IntPtr(&settingsNative));
                }
            }
        }

        settings.__MarshalFrom(ref settingsNative);
    }
Esempio n. 2
0
 public static T CreateAudioReverb <T>() where T : ComObject
 {
     unsafe
     {
         IntPtr reverbPtr = default;
         XAudio2Native.CreateAudioReverb(0u, &reverbPtr).CheckError();
         return(MarshallingHelpers.FromPointer <T>(reverbPtr));
     }
 }
Esempio n. 3
0
 internal IXAudio2(ProcessorSpecifier processorSpecifier, bool registerCallback)
     : base(XAudio2Native.XAudio2Create(0u, processorSpecifier))
 {
     // Register engine callback
     if (registerCallback)
     {
         _engineCallback = new EngineCallbackImpl(this);
         RegisterForCallbacks(_engineCallback);
     }
 }
Esempio n. 4
0
    internal IXAudio2(ProcessorSpecifier processorSpecifier, bool registerCallback)
        : base()
    {
        XAudio2Native.XAudio2Create(processorSpecifier, out IntPtr nativePtr).CheckError();
        NativePointer = nativePtr;

        // Register engine callback
        if (registerCallback)
        {
            _engineCallback = new EngineCallbackImpl(this);
            RegisterForCallbacks(_engineCallback);
        }
    }
Esempio n. 5
0
    public static unsafe Result XAudio2Create(ProcessorSpecifier processor, bool registerCallback, out IXAudio2?XAudio2)
    {
        Result result = XAudio2Native.XAudio2Create(processor, out IntPtr nativePtr);

        if (result.Failure)
        {
            XAudio2 = default;
            return(result);
        }

        XAudio2 = new IXAudio2(nativePtr, registerCallback);
        return(result);
    }
Esempio n. 6
0
    public static Result CreateAudioVolumeMeter <T>(out T?volumeMeter) where T : ComObject
    {
        unsafe
        {
            IntPtr reverbPtr = default;
            Result result    = XAudio2Native.CreateAudioVolumeMeter(0u, &reverbPtr);
            if (result.Failure)
            {
                volumeMeter = default;
                return(result);
            }

            volumeMeter = MarshallingHelpers.FromPointer <T>(reverbPtr);
            return(result);
        }
    }
Esempio n. 7
0
 /// <summary>
 /// Initializes a new instance of the <see cref="X3DAudio"/> class.
 /// </summary>
 /// <param name="speakerChannelMask">
 /// Assignment of channels to speaker positions.
 /// This value must not be zero.
 /// </param>
 /// <param name="speedOfSound">The speed of sound.</param>
 public X3DAudio(int speakerChannelMask, float speedOfSound = SpeedOfSound)
 {
     XAudio2Native.X3DAudioInitialize(speakerChannelMask, speedOfSound, out _handle).CheckError();
 }
Esempio n. 8
0
 /// <summary>
 /// Initializes a new instance of the <see cref="X3DAudio"/> class.
 /// </summary>
 /// <param name="speakers">The speakers config.</param>
 /// <param name="speedOfSound">The speed of sound.</param>
 public X3DAudio(Speakers speakers, float speedOfSound = SpeedOfSound)
 {
     XAudio2Native.X3DAudioInitialize((int)speakers, speedOfSound, out _handle).CheckError();
 }
Esempio n. 9
0
 public static Result CreateAudioVolumeMeter(out ComObject volumeMeter) => XAudio2Native.CreateAudioVolumeMeter(out volumeMeter);
Esempio n. 10
0
 public static Result CreateAudioReverb(out ComObject reverb) => XAudio2Native.CreateAudioReverb(out reverb);