diff --git a/CMakeLists.txt b/CMakeLists.txt
index ad10182ceb..99b3e58d89 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -587,6 +587,11 @@ else()
set(PNG png)
endif()
+# Using static FreeSurround from Externals
+# There is no system FreeSurround library.
+message(STATUS "Using static FreeSurround from Externals")
+add_subdirectory(Externals/FreeSurround)
+
if (APPLE)
message(STATUS "Using ed25519 from Externals")
add_subdirectory(Externals/ed25519)
diff --git a/Externals/FreeSurround/CMakeLists.txt b/Externals/FreeSurround/CMakeLists.txt
new file mode 100644
index 0000000000..6d488f155e
--- /dev/null
+++ b/Externals/FreeSurround/CMakeLists.txt
@@ -0,0 +1,14 @@
+set(CMAKE_CXX_STANDARD 14)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+set(CMAKE_CXX_EXTENSIONS OFF)
+
+set(SRCS
+ source/ChannelMaps.cpp
+ source/KissFFT.cpp
+ source/KissFFTR.cpp
+ source/FreeSurroundDecoder.cpp
+)
+
+add_library(FreeSurround STATIC ${SRCS})
+target_include_directories(FreeSurround PUBLIC include)
+target_compile_options(FreeSurround PRIVATE -w)
diff --git a/Externals/FreeSurround/FreeSurround.vcxproj b/Externals/FreeSurround/FreeSurround.vcxproj
new file mode 100644
index 0000000000..baf9df7ed4
--- /dev/null
+++ b/Externals/FreeSurround/FreeSurround.vcxproj
@@ -0,0 +1,53 @@
+
+
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ {8498F2FA-5CA6-4169-9971-DE5B1FE6132C}
+
+
+
+ StaticLibrary
+ v141
+ Unicode
+
+
+ true
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Externals/FreeSurround/FreeSurround.vcxproj.filters b/Externals/FreeSurround/FreeSurround.vcxproj.filters
new file mode 100644
index 0000000000..65dd14ee66
--- /dev/null
+++ b/Externals/FreeSurround/FreeSurround.vcxproj.filters
@@ -0,0 +1,42 @@
+
+
+
+
+ source
+
+
+ source
+
+
+ source
+
+
+ source
+
+
+
+
+ include
+
+
+ include
+
+
+ include
+
+
+ include
+
+
+ include
+
+
+
+
+ {776ecb31-6d5e-489f-bac9-b91a1b202345}
+
+
+ {11345325-d67c-4a21-b2e9-c7c6c8cfc8b4}
+
+
+
\ No newline at end of file
diff --git a/Externals/FreeSurround/include/FreeSurround/ChannelMaps.h b/Externals/FreeSurround/include/FreeSurround/ChannelMaps.h
new file mode 100644
index 0000000000..9ff4c3a8cf
--- /dev/null
+++ b/Externals/FreeSurround/include/FreeSurround/ChannelMaps.h
@@ -0,0 +1,36 @@
+/*
+Copyright (C) 2010 Christian Kothe
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*/
+
+#ifndef CHANNELMAPS_H
+#define CHANNELMAPS_H
+#include "FreeSurroundDecoder.h"
+#include