diff --git a/alsoft.txt b/alsoft.txt
new file mode 100644
index 00000000..2f928c99
--- /dev/null
+++ b/alsoft.txt
@@ -0,0 +1,14 @@
+[general]
+sample-type=float32
+stereo-mode=speakers
+stereo-encoding=panpot
+hrtf=false
+cf_level=0
+resampler=fast_bsinc24
+front-stablizer=false
+output-limiter=false
+volume-adjust=0
+[decoder]
+hq-mode=false
+distance-comp=false
+nfc=false
\ No newline at end of file
diff --git a/project.xml b/project.xml
index e5edd833..382ed9f6 100644
--- a/project.xml
+++ b/project.xml
@@ -67,6 +67,12 @@
+
+
+
diff --git a/source/funkin/backend/system/modules/ALSoftConfig.hx b/source/funkin/backend/system/modules/ALSoftConfig.hx
new file mode 100644
index 00000000..0b1b57a0
--- /dev/null
+++ b/source/funkin/backend/system/modules/ALSoftConfig.hx
@@ -0,0 +1,31 @@
+package funkin.backend.system.modules;
+
+import haxe.io.Path;
+
+/*
+ * A class that simply points OpenALSoft to a custom configuration file when
+ * the game starts up.
+ *
+ * The config overrides a few global OpenALSoft settings with the aim of
+ * improving audio quality on desktop targets.
+ */
+@:keepInit class ALSoftConfig
+{
+ #if desktop
+ static function __init__():Void
+ {
+ var origin:String = #if hl Sys.getCwd() #else Sys.programPath() #end;
+
+ var configPath:String = Path.directory(Path.withoutExtension(origin));
+ #if windows
+ configPath += "/plugins/alsoft.ini";
+ #elseif mac
+ configPath = Path.directory(configPath) + "/Resources/plugins/alsoft.conf";
+ #else
+ configPath += "/plugins/alsoft.conf";
+ #end
+
+ Sys.putEnv("ALSOFT_CONF", configPath);
+ }
+ #end
+}
\ No newline at end of file