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: 25 апр. 2019 г. 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 #include <metadata/plugins.h> 23 #include <metadata/ports.h> 24 #include <metadata/developers.h> 25 26 namespace lsp 27 { 28 static const port_item_t rb_fft_rank[] = 29 { 30 { "512", NULL }, 31 { "1024", NULL }, 32 { "2048", NULL }, 33 { "4096", NULL }, 34 { "8192", NULL }, 35 { "16384", NULL }, 36 { "32768", NULL }, 37 { "65536", NULL }, 38 { NULL, NULL } 39 }; 40 41 static const port_item_t rb_view[] = 42 { 43 { "Room browser", "room_bld.room_browser" }, 44 { "Sample 0", "sampler.samp.0" }, 45 { "Sample 1", "sampler.samp.1" }, 46 { "Sample 2", "sampler.samp.2" }, 47 { "Sample 3", "sampler.samp.3" }, 48 { "Sample 4", "sampler.samp.4" }, 49 { "Sample 5", "sampler.samp.5" }, 50 { "Sample 6", "sampler.samp.6" }, 51 { "Sample 7", "sampler.samp.7" }, 52 { NULL, NULL } 53 }; 54 55 static const port_item_t rb_samples[] = 56 { 57 { "None", "sampler.samp.none" }, 58 { "Sample 0", "sampler.samp.0" }, 59 { "Sample 1", "sampler.samp.1" }, 60 { "Sample 2", "sampler.samp.2" }, 61 { "Sample 3", "sampler.samp.3" }, 62 { "Sample 4", "sampler.samp.4" }, 63 { "Sample 5", "sampler.samp.5" }, 64 { "Sample 6", "sampler.samp.6" }, 65 { "Sample 7", "sampler.samp.7" }, 66 { NULL, NULL } 67 }; 68 69 static const port_item_t rb_tracks[] = 70 { 71 { "Left", "file.left" }, 72 { "Right", "file.right" }, 73 { NULL, NULL } 74 }; 75 76 static const port_item_t filter_slope[] = 77 { 78 { "off", "eq.slope.off" }, 79 { "6 dB/oct", "eq.slope.6dbo" }, 80 { "12 dB/oct", "eq.slope.12dbo" }, 81 { "18 dB/oct", "eq.slope.18dbo" }, 82 { NULL, NULL } 83 }; 84 85 static const port_item_t rb_editor[] = 86 { 87 { "Source editor", "room_bld.ed.source" }, 88 { "Capture editor", "room_bld.ed.capture" }, 89 { "Object editor", "room_bld.ed.object" }, 90 { "Material editor", "room_bld.ed.material" }, 91 { NULL, NULL } 92 }; 93 94 static const port_item_t rb_processors[] = 95 { 96 { "Convolvers", "room_bld.convolvers" }, 97 { "IR Equalizer", "room_bld.ir_eq" }, 98 { NULL, NULL } 99 }; 100 101 static const port_item_t rb_ssel[] = 102 { 103 { "0", NULL }, 104 { "1", NULL }, 105 { "2", NULL }, 106 { "3", NULL }, 107 { "4", NULL }, 108 { "5", NULL }, 109 { "6", NULL }, 110 { "7", NULL }, 111 { NULL, NULL } 112 }; 113 114 static const port_item_t rb_csel[] = 115 { 116 { "0", NULL }, 117 { "1", NULL }, 118 { "2", NULL }, 119 { "3", NULL }, 120 { "4", NULL }, 121 { "5", NULL }, 122 { "6", NULL }, 123 { "7", NULL }, 124 { NULL, NULL } 125 }; 126 127 static const port_item_t rb_source_mode[] = 128 { 129 { "Triangle", "room_bld.src.tri" }, 130 { "Tetrahedron", "room_bld.src.tetra" }, 131 { "Octahedron", "room_bld.src.octa" }, 132 { "Box", "room_bld.src.box" }, 133 { "Icosahedron", "room_bld.src.ico" }, 134 { "Cylinder", "room_bld.src.cyl" }, 135 { "Cone", "room_bld.src.cone" }, 136 { "Octasphere", "room_bld.src.octa_s" }, 137 { "Icosphere", "room_bld.src.ico_s" }, 138 { "Flat spot", "room_bld.src.flat_s" }, 139 { "Cylindrical spot", "room_bld.src.cyl_s" }, 140 { "Spherical spot", "room_bld.src.sphe_s" }, 141 { NULL, NULL } 142 }; 143 144 static const port_item_t rb_capture_config[] = 145 { 146 { "Mono", "room_bld.capt.mono" }, 147 { "XY", "room_bld.capt.xy" }, 148 { "AB", "room_bld.capt.ab" }, 149 { "ORTF", "room_bld.capt.ortf" }, 150 { "MS", "room_bld.capt.ms" }, 151 { NULL, NULL } 152 }; 153 154 static const port_item_t rb_capture_direction[] = 155 { 156 { "Cardioid", "room_bld.dir.cardio" }, 157 { "Supercardioid", "room_bld.dir.superc" }, 158 { "Hypercardioid", "room_bld.dir.hyperc" }, 159 { "Bidirectional", "room_bld.dir.bi" }, 160 { "8-directional", "room_bld.dir.eight" }, 161 { "Omnidirectional", "room_bld.dir.omni" }, 162 { NULL, NULL } 163 }; 164 165 static const port_item_t rb_capture_side_direction[] = 166 { 167 { "Bidirectional", "room_bld.dir.bi" }, 168 { "8-directional", "room_bld.dir.eight" }, 169 { NULL, NULL } 170 }; 171 172 static const port_item_t rb_reflection[] = 173 { 174 { "Any", "room_bld.refl_any" }, 175 { "0", NULL }, 176 { "1", NULL }, 177 { "2", NULL }, 178 { "3", NULL }, 179 { "4", NULL }, 180 { "5", NULL }, 181 { "6", NULL }, 182 { "7", NULL }, 183 { "8", NULL }, 184 { "9", NULL }, 185 { "10", NULL }, 186 { "11", NULL }, 187 { "12", NULL }, 188 { "13", NULL }, 189 { "14", NULL }, 190 { "15", NULL }, 191 { NULL, NULL } 192 }; 193 194 static const port_item_t rb_orientation[] = 195 { 196 { "+X forward, +Y up", "room_bld.orient.+x+y" }, 197 { "+X forward, +Z up", "room_bld.orient.+x+z" }, 198 { "+X forward, -Y up", "room_bld.orient.+x-y" }, 199 { "+X forward, -Z up", "room_bld.orient.+x-z" }, 200 { "-X forward, +Y up", "room_bld.orient.-x+y" }, 201 { "-X forward, +Z up", "room_bld.orient.-x+z" }, 202 { "-X forward, -Y up", "room_bld.orient.-x-y" }, 203 { "-X forward, -Z up", "room_bld.orient.-x-z" }, 204 205 { "+Y forward, +X up", "room_bld.orient.+y+x" }, 206 { "+Y forward, +Z up", "room_bld.orient.+y+z" }, 207 { "+Y forward, -X up", "room_bld.orient.+y-x" }, 208 { "+Y forward, -Z up", "room_bld.orient.+y-z" }, 209 { "-Y forward, +X up", "room_bld.orient.-y+x" }, 210 { "-Y forward, +Z up", "room_bld.orient.-y+z" }, 211 { "-Y forward, -X up", "room_bld.orient.-y-x" }, 212 { "-Y forward, -Z up", "room_bld.orient.-y-z" }, 213 214 { "+Z forward, +X up", "room_bld.orient.+z+x" }, 215 { "+Z forward, +Y up", "room_bld.orient.+z+y" }, 216 { "+Z forward, -X up", "room_bld.orient.+z-x" }, 217 { "+Z forward, -Y up", "room_bld.orient.+z-y" }, 218 { "-Z forward, +X up", "room_bld.orient.-z+x" }, 219 { "-Z forward, +Y up", "room_bld.orient.-z+y" }, 220 { "-Z forward, -X up", "room_bld.orient.-z-x" }, 221 { "-Z forward, -Y up", "room_bld.orient.-z-y" }, 222 223 { NULL, NULL } 224 }; 225 226 #define RB_PAN_MONO \ 227 PAN_CTL("p", "Panorama", 0.0f) 228 229 #define RB_PAN_STEREO \ 230 PAN_CTL("pl", "Left channel panorama", -100.0f), \ 231 PAN_CTL("pr", "Right channel panorama", 100.0f) 232 233 #define RB_COMMON(pan) \ 234 BYPASS, \ 235 COMBO("view", "Current view", 0, rb_view), \ 236 COMBO("editor", "Current editor", 0, rb_editor), \ 237 COMBO("signal", "Current signal processor", 0, rb_processors), \ 238 COMBO("fft", "FFT size", room_builder_base_metadata::FFT_RANK_DEFAULT, rb_fft_rank), \ 239 CONTROL("pd", "Pre-delay", U_MSEC, room_builder_base_metadata::PREDELAY), \ 240 pan, \ 241 AMP_GAIN1000("dry", "Dry amount", 1.0f), \ 242 AMP_GAIN1000("wet", "Wet amount", 1.0f), \ 243 OUT_GAIN, \ 244 CONTROL("threads", "Number of threads for processing", U_NONE, room_builder_base_metadata::THREADS), \ 245 PERCENTS("quality", "Quality factor", 50.0f, 0.1f), \ 246 STATUS("status", "Render status"), \ 247 OUT_PERCENTS("prog", "Rendering progress"), \ 248 SWITCH("normal", "Normalize rendered samples", 1.0f), \ 249 TRIGGER("render", "Launch/Stop rendering process"), \ 250 PATH("ifn", "Input 3D model file name"), \ 251 STATUS("ifs", "Input 3D model load status"), \ 252 METER_PERCENT("ifp", "File loading progress"), \ 253 COMBO("ifo", "Input 3D model orientation", 9, rb_orientation), \ 254 CONTROL("xscale", "Scene X scale", U_PERCENT, room_builder_base_metadata::OSIZE), \ 255 CONTROL("yscale", "Scene Y scale", U_PERCENT, room_builder_base_metadata::OSIZE), \ 256 CONTROL("zscale", "Scene Z scale", U_PERCENT, room_builder_base_metadata::OSIZE), \ 257 CONTROL_DFL("cposx", "Camera X position", U_M, room_builder_base_metadata::POSITION, 1.0f), \ 258 CONTROL_DFL("cposy", "Camera Y position", U_M, room_builder_base_metadata::POSITION, -0.2f), \ 259 CONTROL_DFL("cposz", "Camera Z position", U_M, room_builder_base_metadata::POSITION, 0.5f), \ 260 { "cyaw", "Camera Yaw angle", U_DEG, R_CONTROL, F_IN | F_LOWER | F_UPPER | F_STEP | F_CYCLIC, 0, 360, 80.0f, 0.1f, NULL, NULL }, \ 261 { "cpitch", "Camera Pitch angle", U_DEG, R_CONTROL, F_IN | F_LOWER | F_UPPER | F_STEP, -89.0f, 89.0f, -25.0f, 0.1f, NULL, NULL } 262 263 264 #define RB_SOURCE(id, label, x, total, ena) \ 265 SWITCH("sse" id, "Source " label " enable", ena), \ 266 COMBO("sscf" id, "Source " label " type", 4, rb_source_mode), \ 267 SWITCH("ssph" id, "Source " label " phase invert", 0), \ 268 CONTROL_DFL("sspx" id, "Source " label " X position", U_M, room_builder_base_metadata::POSITION, 0.0f), \ 269 CONTROL_DFL("sspy" id, "Source " label " Y position", U_M, room_builder_base_metadata::POSITION, -1.0f), \ 270 CONTROL_DFL("sspz" id, "Source " label " Z position", U_M, room_builder_base_metadata::POSITION, 0.0f), \ 271 { "ssay" id , "Source " label " Yaw angle", U_DEG, R_CONTROL, F_IN | F_LOWER | F_UPPER | F_STEP | F_CYCLIC, 0.0f, 360, 90.0f, 0.1f, NULL, NULL }, \ 272 { "ssap" id , "Source " label " Pitch angle", U_DEG, R_CONTROL, F_IN | F_LOWER | F_UPPER | F_STEP, -90.0f, 90.0f, 0, 0.1f, NULL, NULL }, \ 273 { "ssar" id , "Source " label " Roll angle", U_DEG, R_CONTROL, F_IN | F_LOWER | F_UPPER | F_STEP | F_CYCLIC, 0, 360, 0, 0.1f, NULL, NULL }, \ 274 CONTROL("sss" id, "Source " label " size", U_CM, room_builder_base_metadata::SOURCE), \ 275 CONTROL("shh" id, "Source " label " height", U_CM, room_builder_base_metadata::HEIGHT), \ 276 PERCENTS("ssa" id, "Source " label " angle", 50.0f, 0.025f), \ 277 PERCENTS("sscv" id, "Source " label " curvature", 100.0f, 0.05f), \ 278 { "ssh" id, "Source " label " hue", U_NONE, R_CONTROL, F_IN | F_UPPER | F_LOWER | F_STEP | F_CYCLIC, 0.0f, 1.0f, (float(x) / float(total)), 0.25f/360.0f, NULL } 279 280 #define RB_CAPTURE(id, label, x, total, ena) \ 281 SWITCH("sce" id, "Capture " label " enable", ena), \ 282 COMBO("scf" id, "Capture " label " first reflection order", 2, rb_reflection), \ 283 COMBO("scl" id, "Capture " label " last reflection order", 0, rb_reflection), \ 284 CONTROL_DFL("scpx" id, "Capture " label " X position", U_M, room_builder_base_metadata::POSITION, 0.0f), \ 285 CONTROL_DFL("scpy" id, "Capture " label " Y position", U_M, room_builder_base_metadata::POSITION, 1.0f), \ 286 CONTROL_DFL("scpz" id, "Capture " label " Z position", U_M, room_builder_base_metadata::POSITION, 0.0f), \ 287 { "scay" id , "Capture " label " Yaw angle", U_DEG, R_CONTROL, F_IN | F_LOWER | F_UPPER | F_STEP | F_CYCLIC, 0, 360, 270, 0.1f, NULL, NULL }, \ 288 { "scap" id , "Capture " label " Pitch angle", U_DEG, R_CONTROL, F_IN | F_LOWER | F_UPPER | F_STEP, -90.0f, 90.0f, 0, 0.1f, NULL, NULL }, \ 289 { "scar" id , "Capture " label " Roll angle", U_DEG, R_CONTROL, F_IN | F_LOWER | F_UPPER | F_STEP | F_CYCLIC, 0, 360, 0, 0.1f, NULL, NULL }, \ 290 CONTROL("sccs" id, "Capture " label " capsule size", U_CM, room_builder_base_metadata::CAPSULE), \ 291 COMBO("sccf" id, "Capture " label " configuration", 1, rb_capture_config), \ 292 CONTROL("sca" id, "Capture " label " angle", U_DEG, room_builder_base_metadata::ANGLE), \ 293 CONTROL("scab" id, "Capture " label " AB distance", U_M, room_builder_base_metadata::DISTANCE), \ 294 COMBO("scmd" id, "Capture " label " microphone direction", 0, rb_capture_direction), \ 295 COMBO("scsd" id, "Capture " label " side microphone direction", 0, rb_capture_side_direction), \ 296 \ 297 CONTROL("ihc" id, "Head cut" label, U_MSEC, room_builder_base_metadata::CONV_LENGTH), \ 298 CONTROL("itc" id, "Tail cut" label, U_MSEC, room_builder_base_metadata::CONV_LENGTH), \ 299 CONTROL("ifi" id, "Fade in" label, U_MSEC, room_builder_base_metadata::CONV_LENGTH), \ 300 CONTROL("ifo" id, "Fade out" label, U_MSEC, room_builder_base_metadata::CONV_LENGTH), \ 301 TRIGGER("ils" id, "Impulse listen" label), \ 302 SWITCH("irv" id, "Impulse reverse" label, 0.0f), \ 303 AMP_GAIN_RANGE("imkp" id, "Impulse makeup gain" label, 1.0f, 0.001f, 1000.0f), \ 304 STATUS("ifs" id, "Impulse status" label), \ 305 METER("ifl" id, "Impulse length" label, U_MSEC, room_builder_base_metadata::CONV_LENGTH), \ 306 METER("sdur" id, "Impulse current duration" label, U_MSEC, room_builder_base_metadata::DURATION), \ 307 METER("smdur" id, "Impulse max duration" label, U_MSEC, room_builder_base_metadata::DURATION), \ 308 MESH("ifd" id, "Impulse file contents" label, room_builder_base_metadata::TRACKS_MAX, room_builder_base_metadata::MESH_SIZE), \ 309 PATH("ofn" id, "Sample file name" label), \ 310 TRIGGER("ofc" id , "Sample save command" label), \ 311 STATUS("ofs" id, "Sample saving status" label), \ 312 METER_PERCENT("ofp" id, "Sample saving progress" label), \ 313 \ 314 { "sch" id, "Capture " label " hue", U_NONE, R_CONTROL, F_IN | F_UPPER | F_LOWER | F_STEP | F_CYCLIC, 0.0f, 1.0f, (float(x) / float(total)), 0.25f/360.0f, NULL } 315 316 #define RB_CONVOLVER_MONO(id, label, track, mix) \ 317 COMBO("csf" id, "Channel source sample" label, 0, rb_samples), \ 318 COMBO("cst" id, "Channel source track" label, track, rb_tracks), \ 319 AMP_GAIN100("mk" id, "Makeup gain" label, 1.0f), \ 320 SWITCH("cam" id, "Channel mute" label, 0.0f), \ 321 BLINK("ca" id, "Channel activity" label), \ 322 CONTROL("pd" id, "Channel pre-delay" label, U_MSEC, impulse_reverb_base_metadata::PREDELAY), \ 323 PAN_CTL("com" id, "Channel Left/Right output mix" label, mix) 324 325 #define RB_CONVOLVER_STEREO(id, label, track, in_mix, out_mix) \ 326 PAN_CTL("cim" id, "Left/Right input mix" label, in_mix), \ 327 RB_CONVOLVER_MONO(id, label, track, out_mix) 328 329 #define RB_EQ_BAND(id, freq) \ 330 CONTROL("eq_" #id, "Band " freq "Hz gain", U_GAIN_AMP, room_builder_base_metadata::BA) 331 332 #define RB_EQUALIZER \ 333 SWITCH("wpp", "Wet post-process", 0), \ 334 COMBO("lcm", "Low-cut mode", 0, filter_slope), \ 335 CONTROL("lcf", "Low-cut frequency", U_HZ, room_builder_base_metadata::LCF), \ 336 RB_EQ_BAND(0, "50"), \ 337 RB_EQ_BAND(1, "107"), \ 338 RB_EQ_BAND(2, "227"), \ 339 RB_EQ_BAND(3, "484"), \ 340 RB_EQ_BAND(4, "1 k"), \ 341 RB_EQ_BAND(5, "2.2 k"), \ 342 RB_EQ_BAND(6, "4.7 k"), \ 343 RB_EQ_BAND(7, "10 k"), \ 344 COMBO("hcm", "High-cut mode", 0, filter_slope), \ 345 CONTROL("hcf", "High-cut frequency", U_HZ, room_builder_base_metadata::HCF) 346 347 static const port_t room_builder_mono_ports[] = 348 { 349 // Input audio ports 350 AUDIO_INPUT_MONO, 351 AUDIO_OUTPUT_LEFT, 352 AUDIO_OUTPUT_RIGHT, 353 RB_COMMON(RB_PAN_MONO), 354 355 COMBO("ssel", "Source selector", 0, rb_ssel), 356 RB_SOURCE("_0", "0", 0, 8, 1), 357 RB_SOURCE("_1", "1", 1, 8, 0), 358 RB_SOURCE("_2", "2", 2, 8, 0), 359 RB_SOURCE("_3", "3", 3, 8, 0), 360 RB_SOURCE("_4", "4", 4, 8, 0), 361 RB_SOURCE("_5", "5", 5, 8, 0), 362 RB_SOURCE("_6", "6", 6, 8, 0), 363 RB_SOURCE("_7", "7", 7, 8, 0), 364 365 COMBO("csel", "Capture selector", 0, rb_csel), 366 RB_CAPTURE("_0", "0", 0, 8, 1), 367 RB_CAPTURE("_1", "1", 1, 8, 0), 368 RB_CAPTURE("_2", "2", 2, 8, 0), 369 RB_CAPTURE("_3", "3", 3, 8, 0), 370 RB_CAPTURE("_4", "4", 4, 8, 0), 371 RB_CAPTURE("_5", "5", 5, 8, 0), 372 RB_CAPTURE("_6", "6", 6, 8, 0), 373 RB_CAPTURE("_7", "7", 7, 8, 0), 374 375 RB_CONVOLVER_MONO("0", " 0", 0, -100.0f), 376 RB_CONVOLVER_MONO("1", " 1", 1, +100.0f), 377 RB_CONVOLVER_MONO("2", " 2", 0, -100.0f), 378 RB_CONVOLVER_MONO("3", " 3", 1, +100.0f), 379 380 RB_EQUALIZER, 381 382 PORTS_END 383 }; 384 385 static const port_t room_builder_stereo_ports[] = 386 { 387 // Input audio ports 388 PORTS_STEREO_PLUGIN, 389 RB_COMMON(RB_PAN_STEREO), 390 391 COMBO("ssel", "Source selector", 0, rb_ssel), 392 RB_SOURCE("_0", "0", 0, 8, 1), 393 RB_SOURCE("_1", "1", 1, 8, 0), 394 RB_SOURCE("_2", "2", 2, 8, 0), 395 RB_SOURCE("_3", "3", 3, 8, 0), 396 RB_SOURCE("_4", "4", 4, 8, 0), 397 RB_SOURCE("_5", "5", 5, 8, 0), 398 RB_SOURCE("_6", "6", 6, 8, 0), 399 RB_SOURCE("_7", "7", 7, 8, 0), 400 401 COMBO("csel", "Capture selector", 0, rb_csel), 402 RB_CAPTURE("_0", "0", 0, 8, 1), 403 RB_CAPTURE("_1", "1", 1, 8, 0), 404 RB_CAPTURE("_2", "2", 2, 8, 0), 405 RB_CAPTURE("_3", "3", 3, 8, 0), 406 RB_CAPTURE("_4", "4", 4, 8, 0), 407 RB_CAPTURE("_5", "5", 5, 8, 0), 408 RB_CAPTURE("_6", "6", 6, 8, 0), 409 RB_CAPTURE("_7", "7", 7, 8, 0), 410 411 RB_CONVOLVER_STEREO("0", " 0", 0, -100.0f, -100.0f), 412 RB_CONVOLVER_STEREO("1", " 1", 1, -100.0f, +100.0f), 413 RB_CONVOLVER_STEREO("2", " 2", 0, +100.0f, -100.0f), 414 RB_CONVOLVER_STEREO("3", " 3", 1, +100.0f, +100.0f), 415 416 RB_EQUALIZER, 417 418 PORTS_END 419 }; 420 421 static const int room_builder_classes[] = { C_REVERB, -1 }; 422 423 const port_t room_builder_base_metadata::kvt_ports[] = 424 { 425 COMBO("kvt:oid", "Selected object index", 0, NULL), 426 SWITCH("kvt:enabled", "Object enable", 0), 427 CONTROL_DFL("kvt:xpos", "Object position X", U_M, room_builder_base_metadata::POSITION, 0.0f), 428 CONTROL_DFL("kvt:ypos", "Object position Y", U_M, room_builder_base_metadata::POSITION, 0.0f), 429 CONTROL_DFL("kvt:zpos", "Object position Z", U_M, room_builder_base_metadata::POSITION, 0.0f), 430 { "kvt:yaw", "Object Yaw angle", U_DEG, R_CONTROL, F_IN | F_LOWER | F_UPPER | F_STEP | F_CYCLIC, 0.0f, 360, 0.0f, 0.1f, NULL, NULL }, 431 { "kvt:pitch", "Object Pitch angle", U_DEG, R_CONTROL, F_IN | F_LOWER | F_UPPER | F_STEP, -90.0f, 90.0f, 0, 0.1f, NULL, NULL }, 432 { "kvt:roll", "Object Roll angle", U_DEG, R_CONTROL, F_IN | F_LOWER | F_UPPER | F_STEP | F_CYCLIC, 0, 360, 0, 0.1f, NULL, NULL }, 433 CONTROL("kvt:xscale", "Object scaling X", U_PERCENT, room_builder_base_metadata::OSIZE), 434 CONTROL("kvt:yscale", "Object scaling Y", U_PERCENT, room_builder_base_metadata::OSIZE), 435 CONTROL("kvt:zscale", "Object scaling Z", U_PERCENT, room_builder_base_metadata::OSIZE), 436 { "kvt:hue", "Object hue", U_NONE, R_CONTROL, F_IN | F_UPPER | F_LOWER | F_STEP | F_CYCLIC, 0.0f, 1.0f, 0.0f, 0.25f/360.0f, NULL }, 437 LOG_CONTROL("kvt:oabs", "Outer absorption", U_PERCENT, room_builder_base_metadata::MAT_ABSORPTION), 438 LOG_CONTROL("kvt:iabs", "Inner absorption", U_PERCENT, room_builder_base_metadata::MAT_ABSORPTION), 439 SWITCH("kvt:labs", "Link absorption parameters", 1.0f), 440 LOG_CONTROL("kvt:odisp", "Refracted wave outer dispersion", U_NONE, room_builder_base_metadata::MAT_DISPERSION), 441 LOG_CONTROL("kvt:idisp", "Refracted wave inner dispersion", U_NONE, room_builder_base_metadata::MAT_DISPERSION), 442 SWITCH("kvt:ldisp", "Link refracted wave dispersion parameters", 1.0f), 443 LOG_CONTROL("kvt:odiff", "Reflected wave outer diffusion", U_NONE, room_builder_base_metadata::MAT_DISPERSION), 444 LOG_CONTROL("kvt:idiff", "Reflected wave inner diffusion", U_NONE, room_builder_base_metadata::MAT_DISPERSION), 445 SWITCH("kvt:ldiff", "Link reflected wave inner diffusion parameters", 1.0f), 446 CONTROL("kvt:otransp", "Material outer transparency", U_NONE, room_builder_base_metadata::MAT_TRANSPARENCY), 447 CONTROL("kvt:itransp", "Material inner transparency", U_NONE, room_builder_base_metadata::MAT_TRANSPARENCY), 448 SWITCH("kvt:ltransp", "Link material transparency parameters", 1.0f), 449 CONTROL("kvt:speed", "Sound speed in material", U_MPS, room_builder_base_metadata::MAT_SOUND_SPEED) 450 }; 451 452 const room_material_t room_builder_base_metadata::materials[] = 453 { 454 { "Alder", "room_bld.mat.alder", 5060.0f, 6.0f }, 455 { "Aluminum", "room_bld.mat.aluminium", 5080.0f, 0.0f }, 456 { "Ash", "room_bld.mat.ash", 5065.0f, 6.0f }, 457 { "Basalt Fiber", "room_bld.mat.basalt_fiber", 340.29f, 95.0f }, 458 { "Birch", "room_bld.mat.birch", 3625.0f, 8.0f }, 459 { "Brass", "room_bld.mat.brass", 3490.0f, 0.0f }, 460 { "Brick", "room_bld.mat.brick", 3600.0f, 3.2f }, 461 { "Cast Iron", "room_bld.mat.cast_iron", 3850.0f, 0.1f }, 462 { "Concrete", "room_bld.mat.concrete", 4250.0f, 1.5f }, 463 { "Copper", "room_bld.mat.copper", 3710.0f, 0.0f }, 464 { "Corkwood", "room_bld.mat.corkwood", 500.0f, 10.0f }, 465 { "Cotton", "room_bld.mat.cotton", 340.29f, 17.0f }, 466 { "Fiberboard", "room_bld.mat.fiberboard", 340.29f, 70.0f }, 467 { "Fiberglass", "room_bld.mat.fiberglass", 340.29f, 75.0f }, 468 { "Fir", "room_bld.mat.fir", 4600.0f, 6.0f }, 469 { "Fresh Water", "room_bld.mat.fresh_water", 1493.0f, 0.0f }, 470 { "Glass", "room_bld.mat.glass", 5370.0f, 3.0f }, 471 { "Granite", "room_bld.mat.granite", 3950.0f, 1.5f }, 472 { "Gypsum", "room_bld.mat.gypsum", 4970.0f, 6.2f }, 473 { "Ice", "room_bld.mat.ice", 3280.0f, 0.0f }, 474 { "Iron", "room_bld.mat.iron", 5170.0f, 0.0f }, 475 { "Lead", "room_bld.mat.lead", 1200.0f, 0.2f }, 476 { "Maple", "room_bld.mat.maple", 4450.0f, 6.0f }, 477 { "Marble", "room_bld.mat.marble", 6150.0f, 1.3f }, 478 { "Mineral Wool", "room_bld.mat.mineral_wool", 340.29f, 87.0f }, 479 { "Nickel", "room_bld.mat.nickel", 4785.0f, 0.0f }, 480 { "Nickel Silver", "room_bld.mat.nickel_silver", 3580.0f, 0.0f }, 481 { "Oak", "room_bld.mat.oak", 4050.0f, 7.0f }, 482 { "Pine", "room_bld.mat.pine", 5030.0f, 6.0f }, 483 { "Plexiglass", "room_bld.mat.plexiglass", 2670.0f, 15.0f }, 484 { "Polystyrene", "room_bld.mat.polystyrene", 2350.0f, 4.0f }, 485 { "Rubber", "room_bld.mat.rubber", 1600.0f, 6.0f }, 486 { "Sea Water", "room_bld.mat.sea_water", 1533.0f, 0.0f }, 487 { "Silicon", "room_bld.mat.silocon", 3770.0f, 2.0f }, 488 { "Slate", "room_bld.mat.slate", 4510.0f, 1.9f }, 489 { "Steel", "room_bld.mat.steel", 5050.0f, 0.0f }, 490 { "Tin", "room_bld.mat.tin", 2730.0f, 0.1f }, 491 { "Velvet", "room_bld.mat.velvet", 340.29f, 45.0f }, 492 { NULL, NULL, 0.0f, 0.0f } 493 }; 494 495 const plugin_metadata_t room_builder_mono_metadata::metadata = 496 { 497 "Raumbaumeister Mono", 498 "Room Builder Mono", 499 "RB1M", 500 &developers::v_sadovnikov, 501 "room_builder_mono", 502 "cqbr", 503 0, 504 LSP_VERSION(1, 0, 1), 505 room_builder_classes, 506 E_3D_BACKEND | E_KVT_SYNC, 507 room_builder_mono_ports, 508 "simulation/room_builder/mono.xml", 509 "simulation/room_builder", 510 mono_to_stereo_plugin_port_groups 511 }; 512 513 const plugin_metadata_t room_builder_stereo_metadata::metadata = 514 { 515 "Raumbaumeister Stereo", 516 "Room Builder Stereo", 517 "RB1S", 518 &developers::v_sadovnikov, 519 "room_builder_stereo", 520 "mprh", 521 0, 522 LSP_VERSION(1, 0, 1), 523 room_builder_classes, 524 E_3D_BACKEND | E_KVT_SYNC, 525 room_builder_stereo_ports, 526 "simulation/room_builder/stereo.xml", 527 "simulation/room_builder", 528 stereo_plugin_port_groups 529 }; 530 } 531 532 533