1 /* 2 * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/> 3 * (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com> 4 * 5 * This file is part of lsp-plugins 6 * Created on: 24 нояб. 2016 г. 7 * 8 * lsp-plugins is free software: you can redistribute it and/or modify 9 * it under the terms of the GNU Lesser General Public License as published by 10 * the Free Software Foundation, either version 3 of the License, or 11 * any later version. 12 * 13 * lsp-plugins is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU Lesser General Public License for more details. 17 * 18 * You should have received a copy of the GNU Lesser General Public License 19 * along with lsp-plugins. If not, see <https://www.gnu.org/licenses/>. 20 */ 21 22 #ifndef METADATA_LIMITER_H_ 23 #define METADATA_LIMITER_H_ 24 25 namespace lsp 26 { 27 //------------------------------------------------------------------------- 28 // Limiter 29 struct limiter_base_metadata 30 { 31 static const float HISTORY_TIME = 4.0f; // Amount of time to display history [s] 32 static const size_t HISTORY_MESH_SIZE = 560; // 420 dots for history 33 static const size_t OVERSAMPLING_MAX = 8; // Maximum 8x oversampling 34 35 static const float LOOKAHEAD_MIN = 0.1f; // No lookahead [ms] 36 static const float LOOKAHEAD_MAX = 20.0f; // Maximum Lookahead [ms] 37 static const float LOOKAHEAD_DFL = 5.0f; // Default Lookahead [ms] 38 static const float LOOKAHEAD_STEP = 0.005f; // Lookahead step 39 40 static const float ATTACK_TIME_MIN = 0.25f; 41 static const float ATTACK_TIME_MAX = 20.0f; 42 static const float ATTACK_TIME_DFL = 5.0f; 43 static const float ATTACK_TIME_STEP = 0.0025f; 44 45 static const float RELEASE_TIME_MIN = 0.25f; 46 static const float RELEASE_TIME_MAX = 20.0f; 47 static const float RELEASE_TIME_DFL = 5.0f; 48 static const float RELEASE_TIME_STEP = 0.0025f; 49 50 static const float ALR_ATTACK_TIME_MIN = 0.1f; 51 static const float ALR_ATTACK_TIME_MAX = 200.0f; 52 static const float ALR_ATTACK_TIME_DFL = 5.0f; 53 static const float ALR_ATTACK_TIME_STEP = 0.0025f; 54 55 static const float ALR_RELEASE_TIME_MIN = 10.0f; 56 static const float ALR_RELEASE_TIME_MAX = 1000.0f; 57 static const float ALR_RELEASE_TIME_DFL = 50.0f; 58 static const float ALR_RELEASE_TIME_STEP = 0.0025f; 59 60 static const float THRESHOLD_MIN = GAIN_AMP_M_48_DB; 61 static const float THRESHOLD_MAX = GAIN_AMP_0_DB; 62 static const float THRESHOLD_DFL = GAIN_AMP_0_DB; 63 static const float THRESHOLD_STEP = 0.01f; 64 65 static const float KNEE_MIN = GAIN_AMP_M_12_DB; 66 static const float KNEE_MAX = GAIN_AMP_P_12_DB; 67 static const float KNEE_DFL = GAIN_AMP_0_DB; 68 static const float KNEE_STEP = 0.01f; 69 70 static const float LINKING_MIN = 0; 71 static const float LINKING_MAX = 100.0f; 72 static const float LINKING_DFL = 100.0f; 73 static const float LINKING_STEP = 0.01f; 74 75 enum oversampling_mode_t 76 { 77 OVS_NONE, 78 79 OVS_HALF_2X2, 80 OVS_HALF_2X3, 81 OVS_HALF_3X2, 82 OVS_HALF_3X3, 83 OVS_HALF_4X2, 84 OVS_HALF_4X3, 85 OVS_HALF_6X2, 86 OVS_HALF_6X3, 87 OVS_HALF_8X2, 88 OVS_HALF_8X3, 89 90 OVS_FULL_2X2, 91 OVS_FULL_2X3, 92 OVS_FULL_3X2, 93 OVS_FULL_3X3, 94 OVS_FULL_4X2, 95 OVS_FULL_4X3, 96 OVS_FULL_6X2, 97 OVS_FULL_6X3, 98 OVS_FULL_8X2, 99 OVS_FULL_8X3, 100 101 OVS_DEFAULT = OVS_NONE 102 }; 103 104 enum limiter_mode_t 105 { 106 LOM_HERM_THIN, 107 LOM_HERM_WIDE, 108 LOM_HERM_TAIL, 109 LOM_HERM_DUCK, 110 111 LOM_EXP_THIN, 112 LOM_EXP_WIDE, 113 LOM_EXP_TAIL, 114 LOM_EXP_DUCK, 115 116 LOM_LINE_THIN, 117 LOM_LINE_WIDE, 118 LOM_LINE_TAIL, 119 LOM_LINE_DUCK, 120 121 LOM_DEFAULT = LOM_HERM_THIN 122 }; 123 124 enum dithering_t 125 { 126 DITHER_NONE, 127 DITHER_7BIT, 128 DITHER_8BIT, 129 DITHER_11BIT, 130 DITHER_12BIT, 131 DITHER_15BIT, 132 DITHER_16BIT, 133 DITHER_23BIT, 134 DITHER_24BIT, 135 136 DITHER_DEFAULT = DITHER_NONE 137 }; 138 }; 139 140 struct limiter_mono_metadata: public limiter_base_metadata 141 { 142 static const plugin_metadata_t metadata; 143 }; 144 145 struct limiter_stereo_metadata: public limiter_base_metadata 146 { 147 static const plugin_metadata_t metadata; 148 }; 149 150 struct sc_limiter_mono_metadata: public limiter_base_metadata 151 { 152 static const plugin_metadata_t metadata; 153 }; 154 155 struct sc_limiter_stereo_metadata: public limiter_base_metadata 156 { 157 static const plugin_metadata_t metadata; 158 }; 159 160 } 161 162 163 #endif /* METADATA_LIMITER_H_ */ 164