aboutsummaryrefslogtreecommitdiff
path: root/Src/external_dependencies/openmpt-trunk/common/Dither.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/external_dependencies/openmpt-trunk/common/Dither.h')
-rw-r--r--Src/external_dependencies/openmpt-trunk/common/Dither.h86
1 files changed, 86 insertions, 0 deletions
diff --git a/Src/external_dependencies/openmpt-trunk/common/Dither.h b/Src/external_dependencies/openmpt-trunk/common/Dither.h
new file mode 100644
index 00000000..9790aeca
--- /dev/null
+++ b/Src/external_dependencies/openmpt-trunk/common/Dither.h
@@ -0,0 +1,86 @@
+/*
+ * Dither.h
+ * --------
+ * Purpose: Dithering when converting to lower resolution sample formats.
+ * Notes : (currently none)
+ * Authors: Olivier Lapicque
+ * OpenMPT Devs
+ * The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
+ */
+
+
+#pragma once
+
+#include "openmpt/all/BuildSettings.hpp"
+
+#include "mpt/base/macros.hpp"
+#include "mpt/string/types.hpp"
+#include "openmpt/soundbase/Dither.hpp"
+#include "openmpt/soundbase/DitherModPlug.hpp"
+#include "openmpt/soundbase/DitherNone.hpp"
+#include "openmpt/soundbase/DitherSimple.hpp"
+
+#include "mptRandom.h"
+
+#include <vector>
+#include <variant>
+
+#include <cstddef>
+
+
+OPENMPT_NAMESPACE_BEGIN
+
+
+using Dither_Default = Dither_Simple;
+
+
+class DitherNamesOpenMPT
+{
+public:
+ static mpt::ustring GetModeName(std::size_t mode)
+ {
+ mpt::ustring result;
+ switch(mode)
+ {
+ case 0:
+ // no dither
+ result = MPT_USTRING("no");
+ break;
+ case 1:
+ // chosen by OpenMPT code, might change
+ result = MPT_USTRING("default");
+ break;
+ case 2:
+ // rectangular, 0.5 bit depth, no noise shaping (original ModPlug Tracker)
+ result = MPT_USTRING("0.5 bit");
+ break;
+ case 3:
+ // rectangular, 1 bit depth, simple 1st order noise shaping
+ result = MPT_USTRING("1 bit");
+ break;
+ default:
+ result = MPT_USTRING("");
+ break;
+ }
+ return result;
+ }
+};
+
+
+using DithersOpenMPT =
+ Dithers<std::variant<MultiChannelDither<Dither_None>, MultiChannelDither<Dither_Default>, MultiChannelDither<Dither_ModPlug>, MultiChannelDither<Dither_Simple>>, DitherNamesOpenMPT, 4, 1, 0, mpt::good_prng>;
+
+
+struct DithersWrapperOpenMPT
+ : DithersOpenMPT
+{
+ template <typename Trd>
+ DithersWrapperOpenMPT(Trd &rd, std::size_t mode = DithersOpenMPT::DefaultDither, std::size_t channels = DithersOpenMPT::DefaultChannels)
+ : DithersOpenMPT(rd, mode, channels)
+ {
+ return;
+ }
+};
+
+
+OPENMPT_NAMESPACE_END