diff --git a/Barotrauma/BarotraumaClient/ClientCode.projitems b/Barotrauma/BarotraumaClient/ClientCode.projitems
index 96e169d05..b514f2e99 100644
--- a/Barotrauma/BarotraumaClient/ClientCode.projitems
+++ b/Barotrauma/BarotraumaClient/ClientCode.projitems
@@ -202,6 +202,8 @@
+
+
diff --git a/Barotrauma/BarotraumaClient/LinuxClient.csproj b/Barotrauma/BarotraumaClient/LinuxClient.csproj
index c96a76c05..a96474014 100644
--- a/Barotrauma/BarotraumaClient/LinuxClient.csproj
+++ b/Barotrauma/BarotraumaClient/LinuxClient.csproj
@@ -118,9 +118,6 @@
PreserveNewest
-
- PreserveNewest
-
PreserveNewest
@@ -350,7 +347,7 @@
-
+
@@ -368,8 +365,9 @@
-
+
-
+
+
\ No newline at end of file
diff --git a/Barotrauma/BarotraumaClient/MacClient.csproj b/Barotrauma/BarotraumaClient/MacClient.csproj
index b57d6b7cc..82c7835d0 100644
--- a/Barotrauma/BarotraumaClient/MacClient.csproj
+++ b/Barotrauma/BarotraumaClient/MacClient.csproj
@@ -117,9 +117,6 @@
PreserveNewest
-
- PreserveNewest
-
PreserveNewest
diff --git a/Barotrauma/BarotraumaClient/OpenTK.dll.config b/Barotrauma/BarotraumaClient/OpenTK.dll.config
deleted file mode 100644
index 140d56665..000000000
--- a/Barotrauma/BarotraumaClient/OpenTK.dll.config
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Barotrauma/BarotraumaClient/Source/GameSettings.cs b/Barotrauma/BarotraumaClient/Source/GameSettings.cs
index bfd0ad116..56787b488 100644
--- a/Barotrauma/BarotraumaClient/Source/GameSettings.cs
+++ b/Barotrauma/BarotraumaClient/Source/GameSettings.cs
@@ -3,7 +3,7 @@ using Barotrauma.Networking;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
-using OpenTK.Audio.OpenAL;
+using OpenAL;
using System;
using System.Collections.Generic;
using System.Diagnostics;
@@ -465,7 +465,7 @@ namespace Barotrauma
new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.05f), audioSliders.RectTransform), TextManager.Get("VoiceChat"));
- IList deviceNames = Alc.GetString((IntPtr)null, AlcGetStringList.CaptureDeviceSpecifier);
+ IList deviceNames = Alc.GetStringList((IntPtr)null, Alc.CaptureDeviceSpecifier);
foreach (string name in deviceNames)
{
DebugConsole.NewMessage(name + " " + name.Length.ToString(), Color.Lime);
@@ -484,10 +484,10 @@ namespace Barotrauma
if (string.IsNullOrWhiteSpace(VoiceCaptureDevice)) VoiceCaptureDevice = deviceNames[0];
#if (!OSX)
- var deviceList = new GUIDropDown(new RectTransform(new Vector2(1.0f, 0.05f), audioSliders.RectTransform), TextManager.EnsureUTF8(VoiceCaptureDevice), deviceNames.Count);
+ var deviceList = new GUIDropDown(new RectTransform(new Vector2(1.0f, 0.05f), audioSliders.RectTransform), VoiceCaptureDevice, deviceNames.Count);
foreach (string name in deviceNames)
{
- deviceList.AddItem(TextManager.EnsureUTF8(name), name);
+ deviceList.AddItem(name, name);
}
deviceList.OnSelected = (GUIComponent selected, object obj) =>
{
@@ -499,7 +499,7 @@ namespace Barotrauma
};
#else
var suavemente = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.05f), audioSliders.RectTransform),
- TextManager.AddPunctuation(':', TextManager.Get("CurrentDevice"), TextManager.EnsureUTF8(VoiceCaptureDevice)))
+ TextManager.AddPunctuation(':', TextManager.Get("CurrentDevice"), VoiceCaptureDevice))
{
ToolTip = TextManager.Get("CurrentDeviceToolTip.OSX"),
TextAlignment = Alignment.CenterX
@@ -514,7 +514,7 @@ namespace Barotrauma
if (VoiceCaptureDevice == deviceNames[0]) return true;
VoipCapture.ChangeCaptureDevice(deviceNames[0]);
- suavemente.Text = TextManager.AddPunctuation(':', TextManager.Get("CurrentDevice"), TextManager.EnsureUTF8(VoiceCaptureDevice));
+ suavemente.Text = TextManager.AddPunctuation(':', TextManager.Get("CurrentDevice"), VoiceCaptureDevice);
suavemente.Flash(Color.Blue);
return true;
diff --git a/Barotrauma/BarotraumaClient/Source/Networking/Voip/VoipCapture.cs b/Barotrauma/BarotraumaClient/Source/Networking/Voip/VoipCapture.cs
index cd0d3352e..0bf9152ad 100644
--- a/Barotrauma/BarotraumaClient/Source/Networking/Voip/VoipCapture.cs
+++ b/Barotrauma/BarotraumaClient/Source/Networking/Voip/VoipCapture.cs
@@ -1,6 +1,6 @@
using Lidgren.Network;
using Microsoft.Xna.Framework;
-using OpenTK.Audio.OpenAL;
+using OpenAL;
using System;
using System.Linq;
using System.Runtime.InteropServices;
@@ -69,7 +69,7 @@ namespace Barotrauma.Networking
VoipConfig.SetupEncoding();
//set up capture device
- captureDevice = Alc.CaptureOpenDevice(deviceName, VoipConfig.FREQUENCY, ALFormat.Mono16, VoipConfig.BUFFER_SIZE * 5);
+ captureDevice = Alc.CaptureOpenDevice(deviceName, VoipConfig.FREQUENCY, Al.FormatMono16, VoipConfig.BUFFER_SIZE * 5);
if (captureDevice == IntPtr.Zero)
{
@@ -88,20 +88,20 @@ namespace Barotrauma.Networking
return;
}
- ALError alError = AL.GetError();
- AlcError alcError = Alc.GetError(captureDevice);
- if (alcError != AlcError.NoError)
+ int alError = Al.GetError();
+ int alcError = Alc.GetError(captureDevice);
+ if (alcError != Alc.NoError)
{
throw new Exception("Failed to open capture device: " + alcError.ToString() + " (ALC)");
}
- if (alError != ALError.NoError)
+ if (alError != Al.NoError)
{
throw new Exception("Failed to open capture device: " + alError.ToString() + " (AL)");
}
Alc.CaptureStart(captureDevice);
alcError = Alc.GetError(captureDevice);
- if (alcError != AlcError.NoError)
+ if (alcError != Alc.NoError)
{
throw new Exception("Failed to start capturing: " + alcError.ToString());
}
@@ -132,11 +132,11 @@ namespace Barotrauma.Networking
short[] uncompressedBuffer = new short[VoipConfig.BUFFER_SIZE];
while (capturing)
{
- AlcError alcError;
- Alc.GetInteger(captureDevice, AlcGetInteger.CaptureSamples, 1, out int sampleCount);
+ int alcError;
+ Alc.GetInteger(captureDevice, Alc.EnumCaptureSamples, out int sampleCount);
alcError = Alc.GetError(captureDevice);
- if (alcError != AlcError.NoError)
+ if (alcError != Alc.NoError)
{
throw new Exception("Failed to determine sample count: " + alcError.ToString());
}
@@ -160,7 +160,7 @@ namespace Barotrauma.Networking
}
alcError = Alc.GetError(captureDevice);
- if (alcError != AlcError.NoError)
+ if (alcError != Alc.NoError)
{
throw new Exception("Failed to capture samples: " + alcError.ToString());
}
diff --git a/Barotrauma/BarotraumaClient/Source/Sounds/OggSound.cs b/Barotrauma/BarotraumaClient/Source/Sounds/OggSound.cs
index dacc02b24..7f59ebd1e 100644
--- a/Barotrauma/BarotraumaClient/Source/Sounds/OggSound.cs
+++ b/Barotrauma/BarotraumaClient/Source/Sounds/OggSound.cs
@@ -1,5 +1,5 @@
using System;
-using OpenTK.Audio.OpenAL;
+using OpenAL;
using NVorbis;
using System.Collections.Generic;
@@ -21,7 +21,7 @@ namespace Barotrauma.Sounds
reader = new VorbisReader(filename);
- ALFormat = reader.Channels == 1 ? ALFormat.Mono16 : ALFormat.Stereo16;
+ ALFormat = reader.Channels == 1 ? Al.FormatMono16 : Al.FormatStereo16;
SampleRate = reader.SampleRate;
if (!stream)
@@ -35,26 +35,26 @@ namespace Barotrauma.Sounds
CastBuffer(floatBuffer, shortBuffer, readSamples);
- AL.BufferData((int)ALBuffer, ALFormat, shortBuffer,
+ Al.BufferData(ALBuffer, ALFormat, shortBuffer,
readSamples * sizeof(short), SampleRate);
- ALError alError = AL.GetError();
- if (alError != ALError.NoError)
+ int alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to set buffer data for non-streamed audio! "+AL.GetErrorString(alError));
+ throw new Exception("Failed to set buffer data for non-streamed audio! "+Al.GetErrorString(alError));
}
MuffleBuffer(floatBuffer, SampleRate, reader.Channels);
CastBuffer(floatBuffer, shortBuffer, readSamples);
- AL.BufferData((int)ALMuffledBuffer, ALFormat, shortBuffer,
+ Al.BufferData(ALMuffledBuffer, ALFormat, shortBuffer,
readSamples * sizeof(short), SampleRate);
- alError = AL.GetError();
- if (alError != ALError.NoError)
+ alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to set buffer data for non-streamed audio! " + AL.GetErrorString(alError));
+ throw new Exception("Failed to set buffer data for non-streamed audio! " + Al.GetErrorString(alError));
}
reader.Dispose();
@@ -98,4 +98,4 @@ namespace Barotrauma.Sounds
base.Dispose();
}
}
-}
\ No newline at end of file
+}
diff --git a/Barotrauma/BarotraumaClient/Source/Sounds/OpenAL/Al.cs b/Barotrauma/BarotraumaClient/Source/Sounds/OpenAL/Al.cs
new file mode 100644
index 000000000..f2b3d6e9e
--- /dev/null
+++ b/Barotrauma/BarotraumaClient/Source/Sounds/OpenAL/Al.cs
@@ -0,0 +1,467 @@
+/***
+
+MIT License
+
+Copyright (c) 2018 Nathan Glover
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+****************
+
+Further modified for use in Barotrauma.
+Original source code at https://github.com/NathanielGlover/OpenAL.NETCore/
+
+***/
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace OpenAL
+{
+ public class Al
+ {
+#if OSX
+ public const string OpenAlDll = "/System/Library/Frameworks/OpenAL.framework/OpenAL";
+#elif LINUX
+ public const string OpenAlDll = "libopenal.so.1";
+#elif WINDOWS
+#if X86
+ public const string OpenAlDll = "soft_oal_x86.dll";
+#elif X64
+ public const string OpenAlDll = "soft_oal_x64.dll";
+#endif
+#endif
+
+ #region Enum
+
+ public const int None = 0;
+ public const int False = 0;
+ public const int True = 1;
+ public const int SourceRelative = 0x202;
+ public const int ConeInnerAngle = 0x1001;
+ public const int ConeOuterAngle = 0x1002;
+ public const int Pitch = 0x1003;
+ public const int Position = 0x1004;
+ public const int Direction = 0x1005;
+ public const int Velocity = 0x1006;
+ public const int Looping = 0x1007;
+ public const int Buffer = 0x1009;
+ public const int Gain = 0x100A;
+ public const int MinGain = 0x100D;
+ public const int MaxGain = 0x100E;
+ public const int Orientation = 0x100F;
+ public const int SourceState = 0x1010;
+ public const int Initial = 0x1011;
+ public const int Playing = 0x1012;
+ public const int Paused = 0x1013;
+ public const int Stopped = 0x1014;
+ public const int BuffersQueued = 0x1015;
+ public const int BuffersProcessed = 0x1016;
+ public const int SecOffset = 0x1024;
+ public const int SampleOffset = 0x1025;
+ public const int ByteOffset = 0x1026;
+ public const int SourceType = 0x1027;
+ public const int Static = 0x1028;
+ public const int Streaming = 0x1029;
+ public const int Undetermined = 0x1030;
+ public const int FormatMono8 = 0x1100;
+ public const int FormatMono16 = 0x1101;
+ public const int FormatStereo8 = 0x1102;
+ public const int FormatStereo16 = 0x1103;
+ public const int ReferenceDistance = 0x1020;
+ public const int RolloffFactor = 0x1021;
+ public const int ConeOuterGain = 0x1022;
+ public const int MaxDistance = 0x1023;
+ public const int Frequency = 0x2001;
+ public const int Bits = 0x2002;
+ public const int Channels = 0x2003;
+ public const int Size = 0x2004;
+ public const int Unused = 0x2010;
+ public const int Pending = 0x2011;
+ public const int Processed = 0x2012;
+ public const int NoError = False;
+ public const int InvalidName = 0xA001;
+ public const int InvalidEnum = 0xA002;
+ public const int InvalidValue = 0xA003;
+ public const int InvalidOperation = 0xA004;
+ public const int OutOfMemory = 0xA005;
+ public const int Vendor = 0xB001;
+ public const int Version = 0xB002;
+ public const int Renderer = 0xB003;
+ public const int Extensions = 0xB004;
+ public const int EnumDopplerFactor = 0xC000;
+ public const int EnumDopplerVelocity = 0xC001;
+ public const int EnumSpeedOfSound = 0xC003;
+ public const int EnumDistanceModel = 0xD000;
+ public const int InverseDistance = 0xD001;
+ public const int InverseDistanceClamped = 0xD002;
+ public const int LinearDistance = 0xD003;
+ public const int LinearDistanceClamped = 0xD004;
+ public const int ExponentDistance = 0xD005;
+ public const int ExponentDistanceClamped = 0xD006;
+
+ #endregion
+
+ #region Functions
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alEnable")]
+ public static extern void Enable(int capability);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alDisable")]
+ public static extern void Disable(int capability);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alIsEnabled")]
+ public static extern bool IsEnabled(int capability);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alGetString")]
+ private static extern IntPtr _GetString(int param);
+
+ public static string GetString(int param) => Marshal.PtrToStringAnsi(_GetString(param));
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alGetBooleanv")]
+ public static extern void GetBooleanv(int param, out bool data);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alGetIntegerv")]
+ public static extern void GetIntegerv(int param, out int data);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alGetFloatv")]
+ public static extern void GetFloatv(int param, out float data);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alGetDoublev")]
+ public static extern void GetDoublev(int param, out double data);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alGetBoolean")]
+ public static extern bool GetBoolean(int param);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alGetInteger")]
+ public static extern int GetInteger(int param);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alGetFloat")]
+ public static extern float GetFloat(int param);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alGetDouble")]
+ public static extern double GetDouble(int param);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alGetError")]
+ public static extern int GetError();
+
+ public static string GetErrorString(int error)
+ {
+ switch (error)
+ {
+ case NoError:
+ return "No error";
+ case InvalidName:
+ return "Invalid name";
+ case InvalidEnum:
+ return "Invalid enum";
+ case InvalidValue:
+ return "Invalid value";
+ case InvalidOperation:
+ return "Invalid operation";
+ case OutOfMemory:
+ return "Out of memory";
+ default:
+ return "Unknown error";
+ }
+ }
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alIsExtensionPresent")]
+ public static extern bool IsExtensionPresent(string extname);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alGetProcAddress")]
+ public static extern IntPtr GetProcAddress(string fname);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alGetEnumValue")]
+ public static extern int GetEnumValue(string ename);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alListenerf")]
+ public static extern void Listenerf(int param, float value);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alListener3f")]
+ public static extern void Listener3f(int param, float value1, float value2, float value3);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alListenerfv")]
+ public static extern void Listenerfv(int param, float[] values);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alGetListenerf")]
+ public static extern void GetListenerf(int param, out float value);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alGetListener3f")]
+ public static extern void GetListener3f(int param, out float value1, out float value2, out float value3);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alGetListenerfv")]
+ private static extern void _GetListenerfv(int param, IntPtr values);
+
+ public static void GetListenerfv(int param, out float[] values)
+ {
+ int len;
+ switch(param)
+ {
+ case Gain:
+ len = 1;
+ break;
+ case Position:
+ case Velocity:
+ len = 3;
+ break;
+ case Orientation:
+ len = 6;
+ break;
+ default:
+ len = 0;
+ break;
+ }
+
+ values = new float[len];
+
+ GCHandle arrayHandle = GCHandle.Alloc(values, GCHandleType.Pinned);
+ _GetListenerfv(param, arrayHandle.AddrOfPinnedObject());
+ arrayHandle.Free();
+ }
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alGenSources")]
+ private static extern void _GenSources(int n, IntPtr sources);
+
+ public static void GenSources(int n, out uint[] sources)
+ {
+ sources = new uint[n];
+
+ GCHandle arrayHandle = GCHandle.Alloc(sources, GCHandleType.Pinned);
+ _GenSources(n, arrayHandle.AddrOfPinnedObject());
+ arrayHandle.Free();
+ }
+
+ public static void GenSource(out uint source)
+ {
+ GenSources(1, out var sources);
+ source = sources[0];
+ }
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alDeleteSources")]
+ public static extern void DeleteSources(int n, uint[] sources);
+
+ public static void DeleteSource(uint source) => DeleteSources(1, new[] {source});
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alIsSource")]
+ public static extern bool IsSource(uint sid);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alSourcef")]
+ public static extern void Sourcef(uint sid, int param, float value);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alSource3f")]
+ public static extern void Source3f(uint sid, int param, float value1, float value2, float value3);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alSourcefv")]
+ public static extern void Sourcefv(uint sid, int param, float[] values);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alSourcei")]
+ public static extern void Sourcei(uint sid, int param, int value);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alSource3i")]
+ public static extern void Source3i(uint sid, int param, int value1, int value2, int value3);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alSourceiv")]
+ public static extern void Sourceiv(uint sid, int param, int[] values);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alGetSourcef")]
+ public static extern void GetSourcef(uint sid, int param, out float value);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alGetSource3f")]
+ public static extern void GetSource3f(uint sid, int param, out float value1, out float value2, out float value3);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alGetSourcefv")]
+ private static extern void _GetSourcefv(uint sid, int param, IntPtr values);
+
+ public static void GetSourcefv(uint sid, int param, out float[] values)
+ {
+ int len;
+ switch(param)
+ {
+ case Pitch:
+ case Gain:
+ case MaxDistance:
+ case RolloffFactor:
+ case ReferenceDistance:
+ case MinGain:
+ case MaxGain:
+ case ConeOuterGain:
+ case ConeInnerAngle:
+ case ConeOuterAngle:
+ case SecOffset:
+ case SampleOffset:
+ case ByteOffset:
+ len = 1;
+ break;
+ case Position:
+ case Velocity:
+ case Direction:
+ len = 3;
+ break;
+ default:
+ len = 0;
+ break;
+ }
+
+ values = new float[len];
+
+ GCHandle arrayHandle = GCHandle.Alloc(values, GCHandleType.Pinned);
+ _GetSourcefv(sid, param, arrayHandle.AddrOfPinnedObject());
+ arrayHandle.Free();
+ }
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alGetSourcei")]
+ public static extern void GetSourcei(uint sid, int param, out int value);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alGetSource3i")]
+ public static extern void GetSource3i(uint sid, int param, out int value1, out int value2, out int value3);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alGetSourceiv")]
+ private static extern void _GetSourceiv(uint sid, int param, IntPtr values);
+
+ public static void GetSourceiv(uint sid, int param, out int[] values)
+ {
+ int len;
+ switch(param)
+ {
+ case MaxDistance:
+ case RolloffFactor:
+ case ReferenceDistance:
+ case ConeInnerAngle:
+ case ConeOuterAngle:
+ case SourceRelative:
+ case SourceType:
+ case Looping:
+ case Buffer:
+ case SourceState:
+ case BuffersQueued:
+ case BuffersProcessed:
+ case SecOffset:
+ case SampleOffset:
+ case ByteOffset:
+ len = 1;
+ break;
+ case Direction:
+ len = 3;
+ break;
+ default:
+ len = 0;
+ break;
+ }
+
+ values = new int[len];
+
+ GCHandle arrayHandle = GCHandle.Alloc(values, GCHandleType.Pinned);
+ _GetSourceiv(sid, param, arrayHandle.AddrOfPinnedObject());
+ arrayHandle.Free();
+ }
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alSourcePlayv")]
+ public static extern void SourcePlayv(int ns, uint[] sids);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alSourceStopv")]
+ public static extern void SourceStopv(int ns, uint[] sids);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alSourceRewindv")]
+ public static extern void SourceRewindv(int ns, uint[] sids);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alSourcePausev")]
+ public static extern void SourcePausev(int ns, uint[] sids);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alSourcePlay")]
+ public static extern void SourcePlay(uint sid);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alSourceStop")]
+ public static extern void SourceStop(uint sid);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alSourceRewind")]
+ public static extern void SourceRewind(uint sid);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alSourcePause")]
+ public static extern void SourcePause(uint sid);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alSourceQueueBuffers")]
+ public static extern void SourceQueueBuffers(uint sid, int numEntries, uint[] bids);
+
+ public static void SourceQueueBuffer(uint sid, uint bid)
+ {
+ uint[] bids = new uint[1]; bids[0] = bid;
+ SourceQueueBuffers(sid, 1, bids);
+ }
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alSourceUnqueueBuffers")]
+ public static extern void SourceUnqueueBuffers(uint sid, int numEntries, uint[] bids);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alGenBuffers")]
+ private static extern void _GenBuffers(int n, IntPtr buffers);
+
+ public static void GenBuffers(int n, out uint[] buffers)
+ {
+ buffers = new uint[n];
+
+ GCHandle arrayHandle = GCHandle.Alloc(buffers, GCHandleType.Pinned);
+ _GenBuffers(n, arrayHandle.AddrOfPinnedObject());
+ arrayHandle.Free();
+ }
+
+ public static void GenBuffer(out uint buffer)
+ {
+ GenBuffers(1, out var buffers);
+ buffer = buffers[0];
+ }
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alDeleteBuffers")]
+ public static extern void DeleteBuffers(int n, uint[] buffers);
+
+ public static void DeleteBuffer(uint buffer) => DeleteBuffers(1, new[] {buffer});
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alIsBuffer")]
+ public static extern bool IsBuffer(uint bid);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alBufferData")]
+ public static extern void BufferData(uint bid, int format, IntPtr data, int size, int freq);
+
+ public static void BufferData(uint bid, int format, T[] data, int len, int freq)
+ {
+ GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned);
+ BufferData(bid, format, handle.AddrOfPinnedObject(), len, freq);
+ handle.Free();
+ }
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alBufferi")]
+ public static extern void Bufferi(uint bid, int param, int value);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alGetBufferi")]
+ public static extern void GetBufferi(uint bid, int param, out int value);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alDopplerFactor")]
+ public static extern void DopplerFactor(float value);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alDopplerVelocity")]
+ public static extern void DopplerVelocity(float value);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alSpeedOfSound")]
+ public static extern void SpeedOfSound(float value);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alDistanceModel")]
+ public static extern void DistanceModel(int distanceModel);
+
+ #endregion
+ }
+}
diff --git a/Barotrauma/BarotraumaClient/Source/Sounds/OpenAL/Alc.cs b/Barotrauma/BarotraumaClient/Source/Sounds/OpenAL/Alc.cs
new file mode 100644
index 000000000..665c2c54a
--- /dev/null
+++ b/Barotrauma/BarotraumaClient/Source/Sounds/OpenAL/Alc.cs
@@ -0,0 +1,220 @@
+/***
+
+MIT License
+
+Copyright (c) 2018 Nathan Glover
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+****************
+
+Further modified for use in Barotrauma.
+Original source code at https://github.com/NathanielGlover/OpenAL.NETCore/
+
+***/
+
+using System;
+using System.Runtime.InteropServices;
+using System.Collections.Generic;
+using System.Text;
+
+namespace OpenAL
+{
+ public class Alc
+ {
+#if OSX
+ public const string OpenAlDll = "/System/Library/Frameworks/OpenAL.framework/OpenAL";
+#elif LINUX
+ public const string OpenAlDll = "libopenal.so.1";
+#elif WINDOWS
+#if X86
+ public const string OpenAlDll = "soft_oal_x86.dll";
+#elif X64
+ public const string OpenAlDll = "soft_oal_x64.dll";
+#endif
+#endif
+
+ #region Enum
+
+ public const int False = 0;
+ public const int True = 1;
+ public const int Frequency = 0x1007;
+ public const int Refresh = 0x1008;
+ public const int Sync = 0x1009;
+ public const int MonoSources = 0x1010;
+ public const int StereoSources = 0x1011;
+ public const int NoError = False;
+ public const int InvalidDevice = 0xA001;
+ public const int InvalidContext = 0xA002;
+ public const int InvalidEnum = 0xA003;
+ public const int InvalidValue = 0xA004;
+ public const int OutOfMemory = 0xA005;
+ public const int DefaultDeviceSpecifier = 0x1004;
+ public const int DeviceSpecifier = 0x1005;
+ public const int Extensions = 0x1006;
+ public const int MajorVersion = 0x1000;
+ public const int MinorVersion = 0x1001;
+ public const int AttributesSize = 0x1002;
+ public const int AllAttributes = 0x1003;
+ public const int DefaultAllDevicesSpecifier = 0x1012;
+ public const int AllDevicesSpecifier = 0x1013;
+ public const int CaptureDeviceSpecifier = 0x310;
+ public const int CaptureDefaultDeviceSpecifier = 0x311;
+ public const int EnumCaptureSamples = 0x312;
+
+ #endregion
+
+ #region Context Management Functions
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alcCreateContext")]
+ private static extern IntPtr _CreateContext(IntPtr device, IntPtr attrlist);
+
+ public static IntPtr CreateContext(IntPtr device, int[] attrList)
+ {
+ GCHandle handle = GCHandle.Alloc(attrList, GCHandleType.Pinned);
+ IntPtr retVal = _CreateContext(device, handle.AddrOfPinnedObject());
+ handle.Free();
+ return retVal;
+ }
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alcMakeContextCurrent")]
+ public static extern bool MakeContextCurrent(IntPtr context);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alcProcessContext")]
+ public static extern void ProcessContext(IntPtr context);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alcSuspendContext")]
+ public static extern void SuspendContext(IntPtr context);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alcDestroyContext")]
+ public static extern void DestroyContext(IntPtr context);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alcGetCurrentContext")]
+ public static extern IntPtr GetCurrentContext();
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alcGetContextsDevice")]
+ public static extern IntPtr GetContextsDevice(IntPtr context);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alcOpenDevice")]
+ public static extern IntPtr OpenDevice(string deviceName);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alcCloseDevice")]
+ public static extern bool CloseDevice(IntPtr device);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alcGetError")]
+ public static extern int GetError(IntPtr device);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alcIsExtensionPresent")]
+ public static extern bool IsExtensionPresent(IntPtr device, string extname);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alcGetProcAddress")]
+ public static extern IntPtr GetProcAddress(IntPtr device, string funcname);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alcGetEnumValue")]
+ public static extern int GetEnumValue(IntPtr device, string enumname);
+
+ #endregion
+
+ #region Query Functions
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alcGetString")]
+ private static extern IntPtr _GetString(IntPtr device, int param);
+
+ public static string GetString(IntPtr device, int param)
+ {
+ IntPtr strPtr = _GetString(device, param);
+ int strLen = 0;
+ while (Marshal.ReadByte(strPtr,strLen)!='\0') { strLen++; }
+ byte[] bytes = new byte[strLen];
+ Marshal.Copy(strPtr, bytes, 0, strLen);
+ return Encoding.UTF8.GetString(bytes);
+ }
+
+ public static IList GetStringList(IntPtr device, int param)
+ {
+ List retVal = new List();
+ IntPtr strPtr = _GetString(device, param);
+ int strStart = 0;
+ int strEnd = 0;
+ byte currChar = Marshal.ReadByte(strPtr, strEnd);
+ if (currChar == '\0') { return retVal; }
+ byte prevChar = 255;
+ while (true) {
+ strEnd++;
+ prevChar = currChar;
+ currChar = Marshal.ReadByte(strPtr, strEnd);
+
+ if (currChar == '\0')
+ {
+ if (prevChar == '\0')
+ {
+ break;
+ }
+ byte[] bytes = new byte[strEnd-strStart];
+ Marshal.Copy(strPtr+strStart, bytes, 0, strEnd - strStart);
+ retVal.Add(Encoding.UTF8.GetString(bytes));
+ strStart = strEnd+1;
+ }
+ }
+ return retVal;
+ }
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alcGetIntegerv")]
+ public static extern void GetIntegerv(IntPtr device, int param, int size, IntPtr data);
+
+ public static void GetInteger(IntPtr device, int param, out int data)
+ {
+ int[] dataArr = new int[1];
+ GCHandle handle = GCHandle.Alloc(dataArr,GCHandleType.Pinned);
+ GetIntegerv(device, param, 1, handle.AddrOfPinnedObject());
+ handle.Free();
+ data = dataArr[0];
+ }
+
+ #endregion
+
+ #region Capture Functions
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alcCaptureOpenDevice")]
+ private static extern IntPtr CaptureOpenDevice(IntPtr devicename, uint frequency, int format, int buffersize);
+
+ public static IntPtr CaptureOpenDevice(string devicename, uint frequency, int format, int buffersize)
+ {
+ byte[] devicenameBytes = Encoding.UTF8.GetBytes(devicename);
+ GCHandle devicenameHandle = GCHandle.Alloc(devicenameBytes, GCHandleType.Pinned);
+ IntPtr retVal = CaptureOpenDevice(devicenameHandle.AddrOfPinnedObject(), frequency, format, buffersize);
+ devicenameHandle.Free();
+ return retVal;
+ }
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alcCaptureCloseDevice")]
+ public static extern bool CaptureCloseDevice(IntPtr device);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alcCaptureStart")]
+ public static extern void CaptureStart(IntPtr device);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alcCaptureStop")]
+ public static extern void CaptureStop(IntPtr device);
+
+ [DllImport(OpenAlDll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "alcCaptureSamples")]
+ public static extern void CaptureSamples(IntPtr device, IntPtr buffer, int samples);
+
+ #endregion
+ }
+}
diff --git a/Barotrauma/BarotraumaClient/Source/Sounds/Sound.cs b/Barotrauma/BarotraumaClient/Source/Sounds/Sound.cs
index c3b0a474b..a5685cbd1 100644
--- a/Barotrauma/BarotraumaClient/Source/Sounds/Sound.cs
+++ b/Barotrauma/BarotraumaClient/Source/Sounds/Sound.cs
@@ -1,5 +1,5 @@
using System;
-using OpenTK.Audio.OpenAL;
+using OpenAL;
using Microsoft.Xna.Framework;
using System.IO;
@@ -57,7 +57,7 @@ namespace Barotrauma.Sounds
get { return !Stream ? alMuffledBuffer : 0; }
}
- public ALFormat ALFormat
+ public int ALFormat
{
get;
protected set;
@@ -91,26 +91,26 @@ namespace Barotrauma.Sounds
if (!stream)
{
- AL.GenBuffer(out alBuffer);
- ALError alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.GenBuffer(out alBuffer);
+ int alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to create OpenAL buffer for non-streamed sound: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to create OpenAL buffer for non-streamed sound: " + Al.GetErrorString(alError));
}
- if (!AL.IsBuffer(alBuffer))
+ if (!Al.IsBuffer(alBuffer))
{
throw new Exception("Generated OpenAL buffer is invalid!");
}
- AL.GenBuffer(out alMuffledBuffer);
- alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.GenBuffer(out alMuffledBuffer);
+ alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to create OpenAL buffer for non-streamed sound: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to create OpenAL buffer for non-streamed sound: " + Al.GetErrorString(alError));
}
- if (!AL.IsBuffer(alMuffledBuffer))
+ if (!Al.IsBuffer(alMuffledBuffer))
{
throw new Exception("Generated OpenAL buffer is invalid!");
}
@@ -186,32 +186,32 @@ namespace Barotrauma.Sounds
Owner.KillChannels(this);
if (alBuffer != 0)
{
- if (!AL.IsBuffer(alBuffer))
+ if (!Al.IsBuffer(alBuffer))
{
throw new Exception("Buffer to delete is invalid!");
}
- AL.DeleteBuffer(ref alBuffer); alBuffer = 0;
+ Al.DeleteBuffer(alBuffer); alBuffer = 0;
- ALError alError = AL.GetError();
- if (alError != ALError.NoError)
+ int alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to delete OpenAL buffer for non-streamed sound: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to delete OpenAL buffer for non-streamed sound: " + Al.GetErrorString(alError));
}
}
if (alMuffledBuffer != 0)
{
- if (!AL.IsBuffer(alMuffledBuffer))
+ if (!Al.IsBuffer(alMuffledBuffer))
{
throw new Exception("Buffer to delete is invalid!");
}
- AL.DeleteBuffer(ref alMuffledBuffer); alMuffledBuffer = 0;
+ Al.DeleteBuffer(alMuffledBuffer); alMuffledBuffer = 0;
- ALError alError = AL.GetError();
- if (alError != ALError.NoError)
+ int alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to delete OpenAL buffer for non-streamed sound: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to delete OpenAL buffer for non-streamed sound: " + Al.GetErrorString(alError));
}
}
diff --git a/Barotrauma/BarotraumaClient/Source/Sounds/SoundChannel.cs b/Barotrauma/BarotraumaClient/Source/Sounds/SoundChannel.cs
index e939f97bd..a69f4b102 100644
--- a/Barotrauma/BarotraumaClient/Source/Sounds/SoundChannel.cs
+++ b/Barotrauma/BarotraumaClient/Source/Sounds/SoundChannel.cs
@@ -1,5 +1,5 @@
using System;
-using OpenTK.Audio.OpenAL;
+using OpenAL;
using Microsoft.Xna.Framework;
using System.Collections.Generic;
@@ -15,49 +15,49 @@ namespace Barotrauma.Sounds
public SoundSourcePool(int sourceCount = SoundManager.SOURCE_COUNT)
{
- ALError alError = ALError.NoError;
+ int alError = Al.NoError;
ALSources = new uint[sourceCount];
for (int i = 0; i < sourceCount; i++)
{
- AL.GenSource(out ALSources[i]);
- alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.GenSource(out ALSources[i]);
+ alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Error generating alSource[" + i.ToString() + "]: " + AL.GetErrorString(alError));
+ throw new Exception("Error generating alSource[" + i.ToString() + "]: " + Al.GetErrorString(alError));
}
- if (!AL.IsSource(ALSources[i]))
+ if (!Al.IsSource(ALSources[i]))
{
throw new Exception("Generated alSource[" + i.ToString() + "] is invalid!");
}
- AL.SourceStop(ALSources[i]);
- alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.SourceStop(ALSources[i]);
+ alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Error stopping newly generated alSource[" + i.ToString() + "]: " + AL.GetErrorString(alError));
+ throw new Exception("Error stopping newly generated alSource[" + i.ToString() + "]: " + Al.GetErrorString(alError));
}
- AL.Source(ALSources[i], ALSourcef.MinGain, 0.0f);
- alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.Sourcef(ALSources[i], Al.MinGain, 0.0f);
+ alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Error setting min gain: " + AL.GetErrorString(alError));
+ throw new Exception("Error setting min gain: " + Al.GetErrorString(alError));
}
- AL.Source(ALSources[i], ALSourcef.MaxGain, 1.0f);
- alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.Sourcef(ALSources[i], Al.MaxGain, 1.0f);
+ alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Error setting max gain: " + AL.GetErrorString(alError));
+ throw new Exception("Error setting max gain: " + Al.GetErrorString(alError));
}
- AL.Source(ALSources[i], ALSourcef.RolloffFactor, 1.0f);
- alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.Sourcef(ALSources[i], Al.RolloffFactor, 1.0f);
+ alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Error setting rolloff factor: " + AL.GetErrorString(alError));
+ throw new Exception("Error setting rolloff factor: " + Al.GetErrorString(alError));
}
}
}
@@ -66,11 +66,11 @@ namespace Barotrauma.Sounds
{
for (int i = 0; i < ALSources.Length; i++)
{
- AL.DeleteSource(ref ALSources[i]);
- ALError alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.DeleteSource(ALSources[i]);
+ int alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to delete ALSources[" + i.ToString() + "]: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to delete ALSources[" + i.ToString() + "]: " + Al.GetErrorString(alError));
}
}
ALSources = null;
@@ -95,35 +95,35 @@ namespace Barotrauma.Sounds
if (position != null)
{
uint alSource = Sound.Owner.GetSourceFromIndex(Sound.SourcePoolIndex, ALSourceIndex);
- AL.Source(alSource, ALSourceb.SourceRelative, false);
- ALError alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.Sourcei(alSource, Al.SourceRelative, Al.False);
+ int alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to enable source's relative flag: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to enable source's relative flag: " + Al.GetErrorString(alError));
}
- AL.Source(alSource, ALSource3f.Position, position.Value.X, position.Value.Y, position.Value.Z);
- alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.Source3f(alSource, Al.Position, position.Value.X, position.Value.Y, position.Value.Z);
+ alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to set source's position: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to set source's position: " + Al.GetErrorString(alError));
}
}
else
{
uint alSource = Sound.Owner.GetSourceFromIndex(Sound.SourcePoolIndex, ALSourceIndex);
- AL.Source(alSource, ALSourceb.SourceRelative, true);
- ALError alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.Sourcei(alSource, Al.SourceRelative, Al.True);
+ int alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to disable source's relative flag: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to disable source's relative flag: " + Al.GetErrorString(alError));
}
- AL.Source(alSource, ALSource3f.Position, 0.0f, 0.0f, 0.0f);
- alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.Source3f(alSource, Al.Position, 0.0f, 0.0f, 0.0f);
+ alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to reset source's position: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to reset source's position: " + Al.GetErrorString(alError));
}
}
}
@@ -140,12 +140,12 @@ namespace Barotrauma.Sounds
if (ALSourceIndex < 0) return;
uint alSource = Sound.Owner.GetSourceFromIndex(Sound.SourcePoolIndex, ALSourceIndex);
- AL.Source(alSource, ALSourcef.ReferenceDistance, near);
+ Al.Sourcef(alSource, Al.ReferenceDistance, near);
- ALError alError = AL.GetError();
- if (alError != ALError.NoError)
+ int alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to set source's reference distance: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to set source's reference distance: " + Al.GetErrorString(alError));
}
}
}
@@ -161,11 +161,11 @@ namespace Barotrauma.Sounds
if (ALSourceIndex < 0) return;
uint alSource = Sound.Owner.GetSourceFromIndex(Sound.SourcePoolIndex, ALSourceIndex);
- AL.Source(alSource, ALSourcef.MaxDistance, far);
- ALError alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.Sourcef(alSource, Al.MaxDistance, far);
+ int alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to set source's max distance: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to set source's max distance: " + Al.GetErrorString(alError));
}
}
}
@@ -185,11 +185,11 @@ namespace Barotrauma.Sounds
float effectiveGain = gain;
if (category != null) effectiveGain *= Sound.Owner.GetCategoryGainMultiplier(category);
- AL.Source(alSource, ALSourcef.Gain, effectiveGain);
- ALError alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.Sourcef(alSource, Al.Gain, effectiveGain);
+ int alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to set source's gain: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to set source's gain: " + Al.GetErrorString(alError));
}
}
}
@@ -207,11 +207,11 @@ namespace Barotrauma.Sounds
if (!IsStream)
{
uint alSource = Sound.Owner.GetSourceFromIndex(Sound.SourcePoolIndex, ALSourceIndex);
- AL.Source(alSource, ALSourceb.Looping, looping);
- ALError alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.Sourcei(alSource, Al.Looping, looping ? Al.True : Al.False);
+ int alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to set source's looping state: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to set source's looping state: " + Al.GetErrorString(alError));
}
}
}
@@ -242,41 +242,41 @@ namespace Barotrauma.Sounds
if (!IsStream)
{
uint alSource = Sound.Owner.GetSourceFromIndex(Sound.SourcePoolIndex, ALSourceIndex);
- int playbackPos; AL.GetSource(alSource, ALGetSourcei.SampleOffset, out playbackPos);
- ALError alError = AL.GetError();
- if (alError != ALError.NoError)
+ int playbackPos; Al.GetSourcei(alSource, Al.SampleOffset, out playbackPos);
+ int alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to get source's playback position: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to get source's playback position: " + Al.GetErrorString(alError));
}
- AL.SourceStop(alSource);
+ Al.SourceStop(alSource);
- alError = AL.GetError();
- if (alError != ALError.NoError)
+ alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to stop source: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to stop source: " + Al.GetErrorString(alError));
}
- AL.BindBufferToSource(alSource,(uint)(muffled ? Sound.ALMuffledBuffer : Sound.ALBuffer));
+ Al.Sourcei(alSource, Al.Buffer, muffled ? (int)Sound.ALMuffledBuffer : (int)Sound.ALBuffer);
- alError = AL.GetError();
- if (alError != ALError.NoError)
+ alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to bind buffer to source: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to bind buffer to source: " + Al.GetErrorString(alError));
}
- AL.SourcePlay(alSource);
- alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.SourcePlay(alSource);
+ alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to replay source: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to replay source: " + Al.GetErrorString(alError));
}
- AL.Source(alSource, ALSourcei.SampleOffset, playbackPos);
- alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.Sourcei(alSource, Al.SampleOffset, playbackPos);
+ alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to reset playback position: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to reset playback position: " + Al.GetErrorString(alError));
}
}
}
@@ -324,11 +324,13 @@ namespace Barotrauma.Sounds
{
if (ALSourceIndex < 0) return false;
if (IsStream && !reachedEndSample) return true;
- bool playing = AL.GetSourceState(Sound.Owner.GetSourceFromIndex(Sound.SourcePoolIndex, ALSourceIndex)) == ALSourceState.Playing;
- ALError alError = AL.GetError();
- if (alError != ALError.NoError)
+ int state;
+ Al.GetSourcei(Sound.Owner.GetSourceFromIndex(Sound.SourcePoolIndex, ALSourceIndex), Al.SourceState, out state);
+ bool playing = state == Al.Playing;
+ int alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to determine playing state from source: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to determine playing state from source: " + Al.GetErrorString(alError));
}
return playing;
}
@@ -357,47 +359,47 @@ namespace Barotrauma.Sounds
{
if (!IsStream)
{
- AL.BindBufferToSource(sound.Owner.GetSourceFromIndex(Sound.SourcePoolIndex, ALSourceIndex), 0);
- ALError alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.Sourcei(sound.Owner.GetSourceFromIndex(Sound.SourcePoolIndex, ALSourceIndex), Al.Buffer, 0);
+ int alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to reset source buffer: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to reset source buffer: " + Al.GetErrorString(alError));
}
- if (!AL.IsBuffer(sound.ALBuffer))
+ if (!Al.IsBuffer(sound.ALBuffer))
{
throw new Exception(sound.Filename + " has an invalid buffer!");
}
uint alBuffer = sound.Owner.GetCategoryMuffle(category) || muffle ? sound.ALMuffledBuffer : sound.ALBuffer;
- AL.BindBufferToSource(sound.Owner.GetSourceFromIndex(Sound.SourcePoolIndex, ALSourceIndex), alBuffer);
- alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.Sourcei(sound.Owner.GetSourceFromIndex(Sound.SourcePoolIndex, ALSourceIndex), Al.Buffer, (int)alBuffer);
+ alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to bind buffer to source (" + ALSourceIndex.ToString() + ":" + sound.Owner.GetSourceFromIndex(Sound.SourcePoolIndex, ALSourceIndex) + "," + sound.ALBuffer.ToString() + "): " + AL.GetErrorString(alError));
+ throw new Exception("Failed to bind buffer to source (" + ALSourceIndex.ToString() + ":" + sound.Owner.GetSourceFromIndex(Sound.SourcePoolIndex, ALSourceIndex) + "," + sound.ALBuffer.ToString() + "): " + Al.GetErrorString(alError));
}
- AL.SourcePlay(sound.Owner.GetSourceFromIndex(Sound.SourcePoolIndex, ALSourceIndex));
- alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.SourcePlay(sound.Owner.GetSourceFromIndex(Sound.SourcePoolIndex, ALSourceIndex));
+ alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to play source: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to play source: " + Al.GetErrorString(alError));
}
}
else
{
- AL.BindBufferToSource(sound.Owner.GetSourceFromIndex(Sound.SourcePoolIndex, ALSourceIndex), (uint)sound.ALBuffer);
- ALError alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.Sourcei(sound.Owner.GetSourceFromIndex(Sound.SourcePoolIndex, ALSourceIndex), Al.Buffer, (int)sound.ALBuffer);
+ int alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to reset source buffer: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to reset source buffer: " + Al.GetErrorString(alError));
}
- AL.Source(sound.Owner.GetSourceFromIndex(Sound.SourcePoolIndex, ALSourceIndex), ALSourceb.Looping, false);
- alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.Sourcei(sound.Owner.GetSourceFromIndex(Sound.SourcePoolIndex, ALSourceIndex), Al.Looping, Al.False);
+ alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to set stream looping state: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to set stream looping state: " + Al.GetErrorString(alError));
}
streamShortBuffer = new short[STREAM_BUFFER_SIZE];
@@ -406,15 +408,15 @@ namespace Barotrauma.Sounds
emptyBuffers = new List();
for (int i = 0; i < 4; i++)
{
- AL.GenBuffer(out streamBuffers[i]);
+ Al.GenBuffer(out streamBuffers[i]);
- alError = AL.GetError();
- if (alError != ALError.NoError)
+ alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to generate stream buffers: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to generate stream buffers: " + Al.GetErrorString(alError));
}
- if (!AL.IsBuffer(streamBuffers[i]))
+ if (!Al.IsBuffer(streamBuffers[i]))
{
throw new Exception("Generated streamBuffer[" + i.ToString() + "] is invalid!");
}
@@ -445,57 +447,57 @@ namespace Barotrauma.Sounds
{
if (ALSourceIndex >= 0)
{
- AL.SourceStop(Sound.Owner.GetSourceFromIndex(Sound.SourcePoolIndex, ALSourceIndex));
- ALError alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.SourceStop(Sound.Owner.GetSourceFromIndex(Sound.SourcePoolIndex, ALSourceIndex));
+ int alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to stop source: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to stop source: " + Al.GetErrorString(alError));
}
if (IsStream)
{
uint alSource = Sound.Owner.GetSourceFromIndex(Sound.SourcePoolIndex, ALSourceIndex);
- AL.SourceStop(alSource);
- alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.SourceStop(alSource);
+ alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to stop streamed source: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to stop streamed source: " + Al.GetErrorString(alError));
}
int buffersToUnqueue = 0;
- int[] unqueuedBuffers = null;
+ uint[] unqueuedBuffers = null;
buffersToUnqueue = 0;
- AL.GetSource(alSource, ALGetSourcei.BuffersProcessed, out buffersToUnqueue);
- alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.GetSourcei(alSource, Al.BuffersProcessed, out buffersToUnqueue);
+ alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to determine processed buffers from streamed source: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to determine processed buffers from streamed source: " + Al.GetErrorString(alError));
}
- unqueuedBuffers = new int[buffersToUnqueue];
- AL.SourceUnqueueBuffers((int)alSource, buffersToUnqueue, unqueuedBuffers);
- alError = AL.GetError();
- if (alError != ALError.NoError)
+ unqueuedBuffers = new uint[buffersToUnqueue];
+ Al.SourceUnqueueBuffers(alSource, buffersToUnqueue, unqueuedBuffers);
+ alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to unqueue buffers from streamed source: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to unqueue buffers from streamed source: " + Al.GetErrorString(alError));
}
-
- AL.BindBufferToSource(alSource, 0);
- alError = AL.GetError();
- if (alError != ALError.NoError)
+
+ Al.Sourcei(alSource, Al.Buffer, 0);
+ alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to reset buffer for streamed source: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to reset buffer for streamed source: " + Al.GetErrorString(alError));
}
for (int i = 0; i < 4; i++)
{
- AL.DeleteBuffer(ref streamBuffers[i]);
- alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.DeleteBuffer(streamBuffers[i]);
+ alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to delete streamBuffers[" + i.ToString() + "] ("+streamBuffers[i].ToString()+"): " + AL.GetErrorString(alError));
+ throw new Exception("Failed to delete streamBuffers[" + i.ToString() + "] ("+streamBuffers[i].ToString()+"): " + Al.GetErrorString(alError));
}
}
@@ -503,11 +505,11 @@ namespace Barotrauma.Sounds
}
else
{
- AL.BindBufferToSource(Sound.Owner.GetSourceFromIndex(Sound.SourcePoolIndex, ALSourceIndex), 0);
- alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.Sourcei(Sound.Owner.GetSourceFromIndex(Sound.SourcePoolIndex, ALSourceIndex), Al.Buffer, 0);
+ alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to unbind buffer to non-streamed source: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to unbind buffer to non-streamed source: " + Al.GetErrorString(alError));
}
}
@@ -526,47 +528,49 @@ namespace Barotrauma.Sounds
{
uint alSource = Sound.Owner.GetSourceFromIndex(Sound.SourcePoolIndex, ALSourceIndex);
- bool playing = AL.GetSourceState(alSource) == ALSourceState.Playing;
- ALError alError = AL.GetError();
- if (alError != ALError.NoError)
+ int state;
+ Al.GetSourcei(Sound.Owner.GetSourceFromIndex(Sound.SourcePoolIndex, ALSourceIndex), Al.SourceState, out state);
+ bool playing = state == Al.Playing;
+ int alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to determine playing state from streamed source: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to determine playing state from streamed source: " + Al.GetErrorString(alError));
}
int buffersToUnqueue = 0;
- int[] unqueuedBuffers = null;
+ uint[] unqueuedBuffers = null;
if (!startedPlaying)
{
buffersToUnqueue = 0;
- AL.GetSource(alSource, ALGetSourcei.BuffersProcessed, out buffersToUnqueue);
- alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.GetSourcei(alSource, Al.BuffersProcessed, out buffersToUnqueue);
+ alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to determine processed buffers from streamed source: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to determine processed buffers from streamed source: " + Al.GetErrorString(alError));
}
- unqueuedBuffers = new int[buffersToUnqueue+emptyBuffers.Count];
- AL.SourceUnqueueBuffers((int)alSource, buffersToUnqueue, unqueuedBuffers);
+ unqueuedBuffers = new uint[buffersToUnqueue+emptyBuffers.Count];
+ Al.SourceUnqueueBuffers(alSource, buffersToUnqueue, unqueuedBuffers);
for (int i = 0; i < emptyBuffers.Count; i++)
{
- unqueuedBuffers[buffersToUnqueue + i] = (int)emptyBuffers[i];
+ unqueuedBuffers[buffersToUnqueue + i] = emptyBuffers[i];
}
buffersToUnqueue += emptyBuffers.Count;
emptyBuffers.Clear();
- alError = AL.GetError();
- if (alError != ALError.NoError)
+ alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to unqueue buffers from streamed source: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to unqueue buffers from streamed source: " + Al.GetErrorString(alError));
}
}
else
{
startedPlaying = false;
buffersToUnqueue = 4;
- unqueuedBuffers = new int[4];
+ unqueuedBuffers = new uint[4];
for (int i = 0; i < 4; i++)
{
- unqueuedBuffers[i] = (int)streamBuffers[i];
+ unqueuedBuffers[i] = streamBuffers[i];
}
}
@@ -612,20 +616,20 @@ namespace Barotrauma.Sounds
if (readSamples > 0)
{
- AL.BufferData(unqueuedBuffers[i], Sound.ALFormat, buffer, readSamples, Sound.SampleRate);
+ Al.BufferData(unqueuedBuffers[i], Sound.ALFormat, buffer, readSamples, Sound.SampleRate);
- alError = AL.GetError();
- if (alError != ALError.NoError)
+ alError = Al.GetError();
+ if (alError != Al.NoError)
{
throw new Exception("Failed to assign data to stream buffer: " +
- AL.GetErrorString(alError) + ": " + unqueuedBuffers[i].ToString() + "/" + unqueuedBuffers.Length + ", readSamples: " + readSamples);
+ Al.GetErrorString(alError) + ": " + unqueuedBuffers[i].ToString() + "/" + unqueuedBuffers.Length + ", readSamples: " + readSamples);
}
- AL.SourceQueueBuffer((int)alSource, unqueuedBuffers[i]);
- alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.SourceQueueBuffer(alSource, unqueuedBuffers[i]);
+ alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to queue buffer[" + i.ToString() + "] to stream: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to queue buffer[" + i.ToString() + "] to stream: " + Al.GetErrorString(alError));
}
}
else if (readSamples < 0)
@@ -637,10 +641,11 @@ namespace Barotrauma.Sounds
emptyBuffers.Add((uint)unqueuedBuffers[i]);
}
}
-
- if (AL.GetSourceState(alSource) != ALSourceState.Playing)
+
+ Al.GetSourcei(alSource, Al.SourceState, out state);
+ if (state != Al.Playing)
{
- AL.SourcePlay(alSource);
+ Al.SourcePlay(alSource);
}
}
}
diff --git a/Barotrauma/BarotraumaClient/Source/Sounds/SoundManager.cs b/Barotrauma/BarotraumaClient/Source/Sounds/SoundManager.cs
index 14807564c..2d9c74ffa 100644
--- a/Barotrauma/BarotraumaClient/Source/Sounds/SoundManager.cs
+++ b/Barotrauma/BarotraumaClient/Source/Sounds/SoundManager.cs
@@ -2,7 +2,7 @@
using System.Threading;
using System.Collections.Generic;
using System.Xml.Linq;
-using OpenTK.Audio.OpenAL;
+using OpenAL;
using Microsoft.Xna.Framework;
using System.Linq;
using System.IO;
@@ -20,7 +20,7 @@ namespace Barotrauma.Sounds
}
private IntPtr alcDevice;
- private OpenTK.ContextHandle alcContext;
+ private IntPtr alcContext;
public enum SourcePoolIndex
{
@@ -42,11 +42,11 @@ namespace Barotrauma.Sounds
{
if (Disabled) { return; }
listenerPosition = value;
- AL.Listener(ALListener3f.Position,value.X,value.Y,value.Z);
- ALError alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.Listener3f(Al.Position,value.X,value.Y,value.Z);
+ int alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to set listener position: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to set listener position: " + Al.GetErrorString(alError));
}
}
}
@@ -59,11 +59,11 @@ namespace Barotrauma.Sounds
{
if (Disabled) { return; }
listenerOrientation[0] = value.X; listenerOrientation[1] = value.Y; listenerOrientation[2] = value.Z;
- AL.Listener(ALListenerfv.Orientation, ref listenerOrientation);
- ALError alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.Listenerfv(Al.Orientation, listenerOrientation);
+ int alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to set listener target vector: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to set listener target vector: " + Al.GetErrorString(alError));
}
}
}
@@ -74,11 +74,11 @@ namespace Barotrauma.Sounds
{
if (Disabled) { return; }
listenerOrientation[3] = value.X; listenerOrientation[4] = value.Y; listenerOrientation[5] = value.Z;
- AL.Listener(ALListenerfv.Orientation, ref listenerOrientation);
- ALError alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.Listenerfv(Al.Orientation, listenerOrientation);
+ int alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to set listener up vector: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to set listener up vector: " + Al.GetErrorString(alError));
}
}
}
@@ -92,11 +92,11 @@ namespace Barotrauma.Sounds
if (Disabled) { return; }
if (Math.Abs(ListenerGain - value) < 0.001f) { return; }
listenerGain = value;
- AL.Listener(ALListenerf.Gain, listenerGain);
- ALError alError = AL.GetError();
- if (alError != ALError.NoError)
+ Al.Listenerf(Al.Gain, listenerGain);
+ int alError = Al.GetError();
+ if (alError != Al.NoError)
{
- throw new Exception("Failed to set listener gain: " + AL.GetErrorString(alError));
+ throw new Exception("Failed to set listener gain: " + Al.GetErrorString(alError));
}
}
}
@@ -126,8 +126,8 @@ namespace Barotrauma.Sounds
return;
}
- AlcError alcError = Alc.GetError(alcDevice);
- if (alcError != AlcError.NoError)
+ int alcError = Alc.GetError(alcDevice);
+ if (alcError != Alc.NoError)
{
//The audio device probably wasn't ready, this happens quite often
//Just wait a while and try again
@@ -136,7 +136,7 @@ namespace Barotrauma.Sounds
alcDevice = Alc.OpenDevice(null);
alcError = Alc.GetError(alcDevice);
- if (alcError != AlcError.NoError)
+ if (alcError != Alc.NoError)
{
DebugConsole.ThrowError("Error initializing ALC device: " + alcError.ToString() + ". Disabling audio playback...");
Disabled = true;
@@ -161,14 +161,14 @@ namespace Barotrauma.Sounds
}
alcError = Alc.GetError(alcDevice);
- if (alcError != AlcError.NoError)
+ if (alcError != Alc.NoError)
{
DebugConsole.ThrowError("Error after assigning ALC context: " + alcError.ToString() + ". Disabling audio playback...");
Disabled = true;
return;
}
- ALError alError = ALError.NoError;
+ int alError = Al.NoError;
sourcePools = new SoundSourcePool[2];
sourcePools[(int)SourcePoolIndex.Default] = new SoundSourcePool(SOURCE_COUNT);
@@ -177,12 +177,12 @@ namespace Barotrauma.Sounds
sourcePools[(int)SourcePoolIndex.Voice] = new SoundSourcePool(8);
playingChannels[(int)SourcePoolIndex.Voice] = new SoundChannel[8];
- AL.DistanceModel(ALDistanceModel.LinearDistanceClamped);
+ Al.DistanceModel(Al.LinearDistanceClamped);
- alError = AL.GetError();
- if (alError != ALError.NoError)
+ alError = Al.GetError();
+ if (alError != Al.NoError)
{
- DebugConsole.ThrowError("Error setting distance model: " + AL.GetErrorString(alError) + ". Disabling audio playback...");
+ DebugConsole.ThrowError("Error setting distance model: " + Al.GetErrorString(alError) + ". Disabling audio playback...");
Disabled = true;
return;
}
@@ -239,7 +239,7 @@ namespace Barotrauma.Sounds
{
if (Disabled || srcInd < 0 || srcInd >= sourcePools[(int)poolIndex].ALSources.Length) return 0;
- if (!AL.IsSource(sourcePools[(int)poolIndex].ALSources[srcInd]))
+ if (!Al.IsSource(sourcePools[(int)poolIndex].ALSources[srcInd]))
{
throw new Exception("alSources[" + srcInd.ToString() + "] is invalid!");
}
@@ -276,8 +276,8 @@ namespace Barotrauma.Sounds
{
for (int i = 0; i < sourcePools[0].ALSources.Length; i++)
{
- AL.Source(sourcePools[0].ALSources[i], ALSourcef.MaxGain, i == ind ? 1.0f : 0.0f);
- AL.Source(sourcePools[0].ALSources[i], ALSourcef.MinGain, 0.0f);
+ Al.Sourcef(sourcePools[0].ALSources[i], Al.MaxGain, i == ind ? 1.0f : 0.0f);
+ Al.Sourcef(sourcePools[0].ALSources[i], Al.MinGain, 0.0f);
}
}
#endif
@@ -514,7 +514,7 @@ namespace Barotrauma.Sounds
sourcePools[(int)SourcePoolIndex.Default]?.Dispose();
sourcePools[(int)SourcePoolIndex.Voice]?.Dispose();
- if (!Alc.MakeContextCurrent(OpenTK.ContextHandle.Zero))
+ if (!Alc.MakeContextCurrent(IntPtr.Zero))
{
throw new Exception("Failed to detach the current ALC context! (error code: " + Alc.GetError(alcDevice).ToString() + ")");
}
diff --git a/Barotrauma/BarotraumaClient/Source/Sounds/VideoSound.cs b/Barotrauma/BarotraumaClient/Source/Sounds/VideoSound.cs
index ff877c8a0..011d557ab 100644
--- a/Barotrauma/BarotraumaClient/Source/Sounds/VideoSound.cs
+++ b/Barotrauma/BarotraumaClient/Source/Sounds/VideoSound.cs
@@ -3,7 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
-using OpenTK.Audio.OpenAL;
+using OpenAL;
using Microsoft.Xna.Framework;
using System.Runtime.InteropServices;
using System.Threading;
@@ -21,7 +21,7 @@ namespace Barotrauma.Sounds
public VideoSound(SoundManager owner, string filename, int sampleRate, Video vid) : base(owner, filename, true, false)
{
- ALFormat = ALFormat.Stereo16;
+ ALFormat = Al.FormatStereo16;
SampleRate = sampleRate;
sampleQueue = new Queue();
@@ -110,4 +110,4 @@ namespace Barotrauma.Sounds
}
}
}
-}
\ No newline at end of file
+}
diff --git a/Barotrauma/BarotraumaClient/Source/Sounds/VoipSound.cs b/Barotrauma/BarotraumaClient/Source/Sounds/VoipSound.cs
index 18126a8ba..5eb8ad951 100644
--- a/Barotrauma/BarotraumaClient/Source/Sounds/VoipSound.cs
+++ b/Barotrauma/BarotraumaClient/Source/Sounds/VoipSound.cs
@@ -1,6 +1,6 @@
using Barotrauma.Networking;
using Microsoft.Xna.Framework;
-using OpenTK.Audio.OpenAL;
+using OpenAL;
using System;
using System.Collections.Generic;
@@ -58,7 +58,7 @@ namespace Barotrauma.Sounds
{
VoipConfig.SetupEncoding();
- ALFormat = ALFormat.Mono16;
+ ALFormat = Al.FormatMono16;
SampleRate = VoipConfig.FREQUENCY;
queue = q;
diff --git a/Barotrauma/BarotraumaClient/WindowsClient.csproj b/Barotrauma/BarotraumaClient/WindowsClient.csproj
index dc6b33c63..151864bcf 100644
--- a/Barotrauma/BarotraumaClient/WindowsClient.csproj
+++ b/Barotrauma/BarotraumaClient/WindowsClient.csproj
@@ -31,7 +31,7 @@
true
- .pdb
+ .pdb
..\BarotraumaShared\Icon.ico
@@ -39,7 +39,7 @@
true
..\bin\ReleaseWindows\
- TRACE;WINDOWS;CLIENT
+ TRACE;WINDOWS;CLIENT;X64
true
pdbonly
x64
@@ -49,7 +49,7 @@
true
..\bin\DebugWindows\
- TRACE;WINDOWS;CLIENT;DEBUG
+ TRACE;DEBUG;WINDOWS;CLIENT;X64
full
x64
MinimumRecommendedRules.ruleset
@@ -60,7 +60,7 @@
true
..\bin\x86\ReleaseWindows\
- TRACE;WINDOWS;CLIENT
+ TRACE;WINDOWS;CLIENT;X86
true
pdbonly
x86
@@ -70,7 +70,7 @@
true
..\bin\x86\DebugWindows\
- TRACE;WINDOWS;CLIENT;DEBUG
+ TRACE;DEBUG;WINDOWS;CLIENT;X86
full
x86
MinimumRecommendedRules.ruleset
@@ -95,9 +95,6 @@
..\..\Libraries\NuGet\NVorbis.0.8.6\lib\net35\NVorbis.dll
-
- ..\..\Libraries\NuGet\OpenTK.3.0.1\lib\net20\OpenTK.dll
-
..\..\Libraries\NuGet\RestSharp.105.2.3\lib\net45\RestSharp.dll
@@ -215,16 +212,16 @@
-
- PreserveNewest
-
PreserveNewest
-
+
PreserveNewest
-
+
+ PreserveNewest
+
+
PreserveNewest
@@ -306,7 +303,7 @@
-
+
diff --git a/Barotrauma/BarotraumaClient/packages.config b/Barotrauma/BarotraumaClient/packages.config
index e593ce09a..72a6ec439 100644
--- a/Barotrauma/BarotraumaClient/packages.config
+++ b/Barotrauma/BarotraumaClient/packages.config
@@ -8,7 +8,6 @@
-
diff --git a/Barotrauma/BarotraumaClient/OpenAL32.dll b/Barotrauma/BarotraumaClient/soft_oal_x64.dll
similarity index 100%
rename from Barotrauma/BarotraumaClient/OpenAL32.dll
rename to Barotrauma/BarotraumaClient/soft_oal_x64.dll
diff --git a/Barotrauma/BarotraumaClient/soft_oal_x86.dll b/Barotrauma/BarotraumaClient/soft_oal_x86.dll
new file mode 100644
index 000000000..5cf7f3a9b
Binary files /dev/null and b/Barotrauma/BarotraumaClient/soft_oal_x86.dll differ
diff --git a/Barotrauma/BarotraumaClient/wrap_oal.dll b/Barotrauma/BarotraumaClient/wrap_oal.dll
deleted file mode 100644
index 2713dae65..000000000
Binary files a/Barotrauma/BarotraumaClient/wrap_oal.dll and /dev/null differ