LMMS
Loading...
Searching...
No Matches
shaping_clipper.h
Go to the documentation of this file.
1/* Calf DSP plugin pack
2 * Distortion-shaping clipper
3 *
4 * Copyright (C) 2014-2021 Jason Jang
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General
17 * Public License along with this program; if not, write to the
18 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 * Boston, MA 02110-1301 USA
20 */
21#include <vector>
22#include "pffft.h"
23
25{
26public:
27
33 shaping_clipper(int sample_rate, int fft_size, float clip_level = 16384);
35
41 void feed(const float* in_smaples, float* out_samples, bool diff_only = false, float* total_margin_shift = NULL);
42
46 int get_feed_size();
47
51 void set_clip_level(float clip_level);
52
57 void set_iterations(int iterations);
58
64 void set_adaptive_distortion_strength(float strength);
65
73 void set_margin_curve(int points[][2], int num_points);
74
75private:
76 int size;
84
94
100 std::vector<int> spread_table_index;
101 std::vector<std::pair<int, int>> spread_table_range;
102
107
117
122 void apply_window(const float* in_frame, float* out_frame, const bool add_to_out_frame = false);
123
132 void clip_to_window(const float* windowed_frame, float* clipping_delta, float delta_boost = 1.0);
133
138 void calculate_mask_curve(const float* spectrum, float* mask_curve);
139
143 void limit_clip_spectrum(float* clip_spectrum, const float* mask_curve);
144
145};
#define NULL
Definition CarlaBridgeFormat.cpp:30
void set_clip_level(float clip_level)
Definition shaping_clipper.cpp:75
void set_margin_curve(int points[][2], int num_points)
Definition shaping_clipper.cpp:271
std::vector< float > in_frame
Definition shaping_clipper.h:93
float clip_level
Definition shaping_clipper.h:81
void calculate_mask_curve(const float *spectrum, float *mask_curve)
Definition shaping_clipper.cpp:319
std::vector< float > margin_curve
Definition shaping_clipper.h:93
void feed(const float *in_smaples, float *out_samples, bool diff_only=false, float *total_margin_shift=NULL)
Definition shaping_clipper.cpp:87
std::vector< float > spread_table
Definition shaping_clipper.h:93
PFFFT_Setup * pffft
Definition shaping_clipper.h:79
std::vector< float > inv_window
Definition shaping_clipper.h:93
shaping_clipper(int sample_rate, int fft_size, float clip_level=16384)
Definition shaping_clipper.cpp:26
void apply_window(const float *in_frame, float *out_frame, const bool add_to_out_frame=false)
Definition shaping_clipper.cpp:295
std::vector< float > out_dist_frame
Definition shaping_clipper.h:93
void clip_to_window(const float *windowed_frame, float *clipping_delta, float delta_boost=1.0)
Definition shaping_clipper.cpp:306
std::vector< std::pair< int, int > > spread_table_range
Definition shaping_clipper.h:101
float iterations
Definition shaping_clipper.h:82
void set_adaptive_distortion_strength(float strength)
Definition shaping_clipper.cpp:83
void set_iterations(int iterations)
Definition shaping_clipper.cpp:79
int size
Definition shaping_clipper.h:76
int num_psy_bins
Definition shaping_clipper.h:78
void generate_hann_window()
Definition shaping_clipper.cpp:199
void generate_spread_table()
Definition shaping_clipper.cpp:209
float adaptive_distortion_strength
Definition shaping_clipper.h:83
std::vector< float > window
Definition shaping_clipper.h:93
int overlap
Definition shaping_clipper.h:77
~shaping_clipper()
Definition shaping_clipper.cpp:67
int get_feed_size()
Definition shaping_clipper.cpp:71
void limit_clip_spectrum(float *clip_spectrum, const float *mask_curve)
Definition shaping_clipper.cpp:364
std::vector< int > spread_table_index
Definition shaping_clipper.h:100
float sample_rate
Definition shaping_clipper.h:80
Definition pffft.c:1202