aboutsummaryrefslogtreecommitdiffstats
path: root/src/dsd2pcm/noiseshape.hpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/dsd2pcm/noiseshape.hpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/dsd2pcm/noiseshape.hpp b/src/dsd2pcm/noiseshape.hpp
new file mode 100644
index 000000000..726272f91
--- /dev/null
+++ b/src/dsd2pcm/noiseshape.hpp
@@ -0,0 +1,46 @@
+#ifndef NOISE_SHAPE_HXX_INCLUDED
+#define NOISE_SHAPE_HXX_INCLUDED
+
+#include <stdexcept>
+#include "noiseshape.h"
+
+/**
+ * C++ wrapper for the noiseshape C library
+ */
+
+class noise_shaper
+{
+ noise_shape_ctx ctx;
+public:
+ noise_shaper(int sos_count, const float *bbaa)
+ {
+ if (noise_shape_init(&ctx,sos_count,bbaa))
+ throw std::runtime_error("noise shaper initialization failed");
+ }
+
+ noise_shaper(noise_shaper const& x)
+ {
+ if (noise_shape_clone(&x.ctx,&ctx))
+ throw std::runtime_error("noise shaper initialization failed");
+ }
+
+ ~noise_shaper()
+ { noise_shape_destroy(&ctx); }
+
+ noise_shaper& operator=(noise_shaper const& x)
+ {
+ if (this != &x) {
+ noise_shape_destroy(&ctx);
+ if (noise_shape_clone(&x.ctx,&ctx))
+ throw std::runtime_error("noise shaper initialization failed");
+ }
+ return *this;
+ }
+
+ float get() { return noise_shape_get(&ctx); }
+
+ void update(float error) { noise_shape_update(&ctx,error); }
+};
+
+#endif /* NOISE_SHAPE_HXX_INCLUDED */
+