Ejemplo n.º 1
0
            public static void Create()
            {
                IntPtr ctx;

                try
                {
                    FAudio.FAudioCreate(
                        out ctx,
                        0,
                        FAudio.FAUDIO_DEFAULT_PROCESSOR
                        );
                }
                catch
                {
                    /* FAudio is missing, bail! */
                    return;
                }

                uint devices;

                FAudio.FAudio_GetDeviceCount(
                    ctx,
                    out devices
                    );
                if (devices == 0)
                {
                    /* No sound cards, bail! */
                    FAudio.FAudio_Release(ctx);
                    return;
                }

                Context = new FAudioContext(ctx, devices);
            }
Ejemplo n.º 2
0
            private FAudioContext(IntPtr ctx, uint devices)
            {
                Handle = ctx;

                uint i;

                for (i = 0; i < devices; i += 1)
                {
                    FAudio.FAudio_GetDeviceDetails(
                        Handle,
                        i,
                        out DeviceDetails
                        );
                    if ((DeviceDetails.Role & FAudio.FAudioDeviceRole.FAudioDefaultGameDevice) == FAudio.FAudioDeviceRole.FAudioDefaultGameDevice)
                    {
                        break;
                    }
                }
                if (i == devices)
                {
                    i = 0;                     /* Oh well. */
                    FAudio.FAudio_GetDeviceDetails(
                        Handle,
                        i,
                        out DeviceDetails
                        );
                }
                if (FAudio.FAudio_CreateMasteringVoice(
                        Handle,
                        out MasterVoice,
                        FAudio.FAUDIO_DEFAULT_CHANNELS,
                        FAudio.FAUDIO_DEFAULT_SAMPLERATE,
                        0,
                        i,
                        IntPtr.Zero
                        ) != 0)
                {
                    FAudio.FAudio_Release(ctx);
                    Handle = IntPtr.Zero;
                    FNALoggerEXT.LogError(
                        "Failed to create mastering voice!"
                        );
                    return;
                }

                CurveDistanceScaler = 1.0f;
                DopplerScale        = 1.0f;
                SpeedOfSound        = 343.5f;
                Handle3D            = new byte[FAudio.F3DAUDIO_HANDLE_BYTESIZE];
                FAudio.F3DAudioInitialize(
                    DeviceDetails.OutputFormat.dwChannelMask,
                    SpeedOfSound,
                    Handle3D
                    );

                Context = this;
            }
Ejemplo n.º 3
0
 public void Dispose()
 {
     if (ReverbVoice != IntPtr.Zero)
     {
         FAudio.FAudioVoice_DestroyVoice(ReverbVoice);
         ReverbVoice = IntPtr.Zero;
         Marshal.FreeHGlobal(reverbSends.pSends);
     }
     FAudio.FAudioVoice_DestroyVoice(MasterVoice);
     FAudio.FAudio_Release(Handle);
     Context = null;
 }
Ejemplo n.º 4
0
 internal static FAudioContext Device()
 {
     if (FAudioContext.Context != null)
     {
         return(FAudioContext.Context);
     }
     FAudioContext.Create();
     if (FAudioContext.Context == null)
     {
         throw new NoAudioHardwareException();
     }
     return(FAudioContext.Context);
 }
Ejemplo n.º 5
0
            public static void Create()
            {
                IntPtr ctx;

                try
                {
                    FAudio.FAudioCreate(
                        out ctx,
                        0,
                        FAudio.FAUDIO_DEFAULT_PROCESSOR
                        );
                }
                catch (Exception e)
                {
                    /* FAudio is missing, bail! */
                    FNALoggerEXT.LogWarn("FAudio failed to load: " + e.ToString());
                    return;
                }

                uint devices;

                FAudio.FAudio_GetDeviceCount(
                    ctx,
                    out devices
                    );
                if (devices == 0)
                {
                    /* No sound cards, bail! */
                    FAudio.FAudio_Release(ctx);
                    return;
                }

                FAudioContext context = new FAudioContext(ctx, devices);

                if (context.Handle == IntPtr.Zero)
                {
                    /* Soundcard failed to configure, bail! */
                    context.Dispose();
                    return;
                }

                Context = context;
            }