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); }
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; }
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; }
internal static FAudioContext Device() { if (FAudioContext.Context != null) { return(FAudioContext.Context); } FAudioContext.Create(); if (FAudioContext.Context == null) { throw new NoAudioHardwareException(); } return(FAudioContext.Context); }
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; }