using System; using OpenTK; using OpenTK.Audio; namespace Audio_info { class Program { static void checkForErrors() { { IntPtr device = Alc.GetContextsDevice(Alc.GetCurrentContext()); AlcError error = Alc.GetError(device); if (error != AlcError.NoError) throw new Exception("ALC Error: (" + error + ") " + Alc.GetString(device, (AlcGetString)error)); } { ALError error = AL.GetError(); if (error != ALError.NoError) throw new Exception("AL Error: (" + error + ") " + AL.GetErrorString(error)); } } static void printDevices(AlcGetStringList which, string kind) { System.Collections.Generic.IList strings = Alc.GetString(IntPtr.Zero, which); checkForErrors(); Console.WriteLine("Available " + kind + " devices:"); foreach (string s in strings) Console.WriteLine(s); } static void printALCInfo() { int major, minor; IntPtr device; if (Alc.IsExtensionPresent(IntPtr.Zero, "ALC_ENUMERATION_EXT")) { if (Alc.IsExtensionPresent(IntPtr.Zero, "ALC_ENUMERATE_ALL_EXT")) printDevices(AlcGetStringList.AllDevicesSpecifier, "playback "); else printDevices(AlcGetStringList.DeviceSpecifier, "playback "); printDevices(AlcGetStringList.CaptureDeviceSpecifier, "capture "); } else Console.WriteLine("No device enumeration available."); device = Alc.GetContextsDevice(Alc.GetCurrentContext()); checkForErrors(); Console.WriteLine("Default device: \n"+ Alc.GetString(device, AlcGetString.DefaultDeviceSpecifier)); Console.WriteLine("Default capture device: \n"+ Alc.GetString(device, AlcGetString.CaptureDefaultDeviceSpecifier)); Alc.GetInteger(device, AlcGetInteger.MajorVersion, 1, out major); Alc.GetInteger(device, AlcGetInteger.MinorVersion, 1, out minor); checkForErrors(); Console.WriteLine("ALC version: " + major + "." + minor); Console.WriteLine("ALC extensions: for device ("+device +")\n"+ Alc.GetString(device, AlcGetString.Extensions)); checkForErrors(); Console.WriteLine("ALC extensions: for device (null)\n" + Alc.GetString(IntPtr.Zero, AlcGetString.Extensions)); checkForErrors(); } [STAThread] static void Main(string[] args) { // Extra check added, maybe AudioContext's static methods screw something up? checkForErrors(); IntPtr device = Alc.OpenDevice(null); ContextHandle context = Alc.CreateContext(device, (int[])null); bool success1 = Alc.MakeContextCurrent(context); checkForErrors(); printALCInfo(); // printALInfo(); // printEFXInfo(); checkForErrors(); bool success2 = Alc.MakeContextCurrent(ContextHandle.Zero); Alc.DestroyContext(context); bool success3 = Alc.CloseDevice(device); Console.WriteLine("All done. Press Enter to exit."); Console.ReadLine(); } } }